十六、集合与泛型
数据结构:排序
- ArrayList 元素会维持被加入ArrayList的顺序,所以它们不会依照字母排序,ArrayList没有sort()方法
- TreeSet 以有序状态保持并可防止重复
- HashMap 可用成对的name/value来保存与取出
- LinkedList 针对经常插入或删除中间元素所设计的高效率集合
- HashSet 防止重复的集合,可快速地寻找相符的元素
- LinkedHashMap 类似HashMap,但可记住元素插入的顺序,也可设定依照元素上次存取的小猴来排序
Collections.sort()
sort()很大量地运用到泛型(generic)功能,在程序中看见<>就代表泛型正在使用
在泛型出现之前,没有办法声明ArrayList的类型,所以只能用Object来操作
extends和implements
- extends是继承某个类,继承之后可以使用父类的方法,也可以重写父类的方法
- implements是显现多个接口,接口的方法一般为空,也可以重写父类的方法,但不可覆盖父类的方法或变量名
- java不支持多重继承,可以实现多个接口
- class A extends B implements C,D,E
接口的注意事项:
- 实现一个接口就是要实现该接口的所有的方法(抽象类除外)
- 接口中的方法都是抽象的。
- 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口
Comparable
实现Comparable接口
comparableTo<T o>
经常使用自制的Comparator接口可以很好地实各种功能的排序
ArrayList<Song> songList = new ArrayList<Song>();
public static void main(String[] args) {
Compare c = new Compare();
c.go();
}
class ArtistCompare implements Comparator<Song>{
@Override
public int compare(Song one, Song two) {
return one.getArtist().compareTo(two.getArtist());
}
}
public void go(){
getSongs();
// Collections.sort(songList); song类必须实现Comparable接口才能用
ArtistCompare artistCompare = new ArtistCompare();
Collections.sort(songList,artistCompare);
}
private void getSongs() {
}
List、Set、Map
- List:对付顺序的好帮手
- Set:不允许有重复的元素
- Map:使用成对的键值和数据值 可允许数据值重复,键值不可重复
HashSet如何检查重复:hashCode()与equals()
- 如果两个有对象相等,则hashcode必须相等
- 如果两个对象相等,则equals返回的值为true
- 如果两个对象有相同的hashcode值,它们不一定相等
- 如果equals()被覆盖,则hashcode()也必须被覆盖
hashcode就是通过hash函数得来的,通俗的说,就是通过某一种算法得到的,hashcode就是在hash表中有对应的位置。
(如果记得hash表就很容易理解,hash值可以相同)