使用十六进制和 Java 集合框架选择

Using Hexadecimals and Java Collection Framework Choices

我正在使用包含 20 个十六进制值的输入文件。我必须读取这些对并将它们存储在适当的 Java 集合中,然后按照它们的十六进制值的递增顺序对这些对进行排序,并使用迭代器将排序后的对显示到控制台。我的问题是最好使用哪个集合?哈希表?链表?树?等等。它们看起来都是不错的选择,但我无法决定哪种方式更有效。

#FF0000 //red
#000084 //blue
#00FF00 //green
#FFFF00 //yellow
#FF8C00 //Orange
#FFC0CB //Pink
#D3D3D3 //Grey
#964B00 //Brown
#800080 //Purple
#000000 //Black
#013220 //Dark green
#8B0000 //Dark Red
#00008B //Dark blue
#D97700 //Dark Orange
#363737 //Dark grey
#471E8A //Dark Purple
#7f7f00 //Dark yellow
#FFFFCC //Light Yellow
#C0D9D9 //Light Blue
#D8BFD8 //Light Purple

我会创建一个class来封装数据,它将实现 Comparable 接口

public class HexColor implements Comparable<HexColor>{
    private String hexCode;
    private String name;

    //Constructor, getters and setters
...
    public int compareTo(HexColor other){
        return this.hexCode.compareTo(other.hexCode);
    }
}

然后你可以把它放到一个List然后通过Collections排序 class:

List<HexColor> colors = new ArrayList<HexColor>();
colors.add(new HexColor("#00xxxx", "color 1"));
colors.add(new HexColor("#00xxxx", "color 1"));
...
Collections.sort(colors);
//Some print in loop here

..你将从文件

中读取那些

注意:未经测试。我在任何地方都假设了理智的值,所以没有 NP 检查。

你有一个配对列表。您可以使用 Map 并将十六进制代码作为键,将名称作为值。键需要排序,所以你需要一个 SortedMap 例如 TreeMap. 它可能是一个 TreeMap<Integer, String> 如果你在插入之前在键上使用 Integer.parseInt("xxxxxx", 16),它给出你比将它们保留为字符串更好的性能。