Java集合框架
Java集合框架图
用作自己学习笔记:如有不当的地方,还请指点~
首先上图啦:看看Java集合相关类的关系图
Collection接口继承树
Map接口继承树
Java集合框架概述
由上图可知:
Java集合可以分为Collection和Map两种体系
Collection接口:
- Set:元素无序、不可重复的集合
- List:元素有序、可重复的集合
Map接口
- 具有映射关系"key-value"对的集合
源码分析
ArrayList源码分析
LinkedList源码分析
HashSet源码分析
HashMap源码分析
手动实现一个HashTable
关于迭代器
如何获取迭代器:
方式1:
- 创建Collection对象
- 实例化Collection的迭代器
方式2:
为了简化Iterator,jdk5.0出现了增强for
增强for的本质就是Iterator,只是语法简化了
语法:
for(元素类型 元素名:集合或者数组名){
//访问元素即可
}
没有加泛型的情况下,默认是Object
注意事项
- 迭代器和增强for的底层是一样的,本质上没有区别,增强for类似于迭代器的语法糖,只是在代码语法上进行了简化
- 获取迭代器,由于其底层维护一个expecteModcount变量,用于记录集合的初始值大小,且每次迭代前都要比对一次,如果集合大小有所变化,则抛出异常----------->所以在迭代过程中不能增删原集合中的元素,能修改。如果非要进行删除操作,迭代器提供了删除的方法:iterator.remove();
Collections工具类
collections工具类提供了一些常用的集合方法
一下仅为常用:
List list;
@Before
public void before(){
list = new ArrayList();
list.add("jack");
list.add("lucy");
list.add("true");
list.add("false");
list.add("Enpi");
}
-
方法1:reverse 进行反转
@Test public void test(){ Collections.reverse(list); }
Res:
原集合[jack, lucy, true, false, Enpi]
反转[Enpi, false, true, lucy, jack]
2. 方法2:shuffle 随机排序
@Test
public void test1(){
Collections.shuffle(list);
}
Res:
原集合[jack, lucy, true, false, Enpi]
随机排序[false, jack, lucy, true, Enpi]
3.方法3:sort 自然排序
@Test
public void test2(){
Collections.sort(list);
}
Res:
原集合[jack, lucy, true, false, Enpi]
自然排序[Enpi, false, jack, lucy, true]
4.方法4:定制排序:需实现Comparator()
@SuppressWarnings("unchecked")
@Test
public void test3(){
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1,Object o2){
String s1 = (String) o1;
String s2 = (String) o2;
return -s1.compareTo(s2);
}
});
}
Res:
原集合[jack, lucy, true, false, Enpi]
定制排序[true, lucy, jack, false, Enpi]
5.方法5:交换位置
@Test
public void test4(){
Collections.swap(list, 0, 3);
System.out.println("交换位置"+list);
}
Res:
原集合[jack, lucy, true, false, Enpi]
交换位置[false, lucy, true, jack, Enpi]
6.方法6:max(需实现Comparator)
@Test
public void test5(){
Object max = Collections.max(list, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 =(String) o2;
return s1.compareTo(s2);
}
});
}
Res:
原集合[jack, lucy, true, false, Enpi]
max: true
7.方法7:frequency 返回一个元素在集合中出现的次数
@Test
public void test6(){
int f = Collections.frequency(list,"Enpi");
System.out.println("返回一个元素在集合中出现的次数"+f);
}
Res:
原集合[jack, lucy, true, false, Enpi]
返回一个元素在集合中出现的次数1
8.方法8:copy 注意:新集合元素的个数要大于被copy的个数
@Test
public void test7(){
List dest = new ArrayList();
for(int i=1;i<=10;i++){
dest.add("java"+i);
}
Collections.copy(dest, list);
}
Res:
原集合[jack, lucy, true, false, Enpi]
copy: [jack, lucy, true, false, Enpi, java6, java7, java8, java9, java10]
9.方法9://replaceAll : 将集合中该元素全部替换成新元素
@Test
public void test8(){
Collections.replaceAll(list, "Enpi", "GodF");
}
Res:
原集合[jack, lucy, true, false, Enpi]
将集合中该元素全部替换成新元素:[jack, lucy, true, false, GodF]