使用List

在集合类中,List是最基础的一种集合:它是一种有序列表。 List的行为和数组几乎完全相同:List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。 数组和List类似,也是有序结构,如果我们使用数组,在添加和删除元素的时候,会非常不方便。例如,从一个已有的数组{'A', 'B', 'C', 'D', 'E'}中删除索引为2的元素: ┌─
使用List

编写equals方法

我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置。 List还提供了boolean contains(Object o)方法来判断List是否包含某个指定元素。此外,int indexOf(Object o)方法可以返回某个元素的索引,如果元素不存在,就返回-1。 我们来看一个例子: import java.util.List; pu
编写equals方法

使用Map

我们知道,List是一种顺序列表,如果有一个存储学生Student实例的List,要在List中根据name查找某个指定的Student的分数,应该怎么办? 最简单的方法是遍历List并判断name是否相等,然后返回指定元素: List<Student> list = ... Student target = null; for (Student s : list) { if ("Xi
使用Map

编写hashCode方法

我们知道Map是一种键-值(key-value)映射表,可以通过key快速查找对应的value。 以HashMap为例,观察下面的代码: Map<String, Person> map = new HashMap<>(); map.put("a", new Person("Xiao Ming")); map.put("b", new Person("Xiao Hong"))
编写hashCode方法

使用EnumMap

因为HashMap是一种通过对key计算hashCode(),通过空间换时间的方式,直接定位到value所在的内部数组的索引,因此,查找效率非常高。 如果作为key的对象是enum类型,那么,还可以使用Java集合库提供的一种EnumMap,它在内部以一个非常紧凑的数组存储value,并且根据enum类型的key直接定位到内部数组的索引,并不需要计算hashCode(),不但效率最高,而且没有额外
使用EnumMap

使用TreeMap

我们已经知道,HashMap是一种以空间换时间的映射表,它的实现原理决定了内部的Key是无序的,即遍历HashMap的Key时,其顺序是不可预测的(但每个Key都会遍历一次且仅遍历一次)。 还有一种Map,它在内部会对Key进行排序,这种Map就是SortedMap。注意到SortedMap是接口,它的实现类是TreeMap。 ┌───┐ │Map│ └───┘ ▲ ┌────┴─────┐ │
使用TreeMap

使用Properties

在编写应用程序的时候,经常需要读写配置文件。例如,用户的设置: # 上次最后打开的文件: last_open_file=/data/hello.txt # 自动保存文件的时间间隔: auto_save_interval=60 配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map<String, String>来表示它。 因为配置文件
使用Properties

使用Set

我们知道,Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。 如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set。 Set用于存储不重复的元素集合,它主要提供以下几个方法: 将元素添加进Set<E>:boolean add(E e) 将元素从Se
使用Set