首页 > 基础资料 博客日记
2022-08-06 第4组 蒋萍 Java集合的简单介绍
2023-08-10 16:52:51基础资料围观222次
“活的认真,笑的放肆”
本文只是简单整理了关于集合的一些简单引应用,还有些凌乱,建议看导图学习
一、集合
就是容器容器,方便存储和操作数据
导图
下面这张图来自网络,如有侵权,联系删
1、Collection:存放单值的最大父接口
List
Set
1.1 List
List集合中存放的数据:
1、数据有序,(添加的先后顺序和输出的顺序一致)
2、数据可以重复
ArrayList类
内部是一个数组,
它的一些常用方法:
数组变集合:
- 数组和集合之间的转换时,建议封装成一个工具类
/**
* 数组与集合之间的相互转换
*/
public class ArrayTrans {
public static Object[] toArr(List list){
Object[] obj = new Object[list.size()];
for (int i = 0; i < list.size(); i++) {
obj[i] = list.get(i);
}
return obj;
}
public static List toList(Object[] arr){
List list = new ArrayList();
for (Object o : list) {
list.add(o);
}
return list;
}
}
注意的小点:
-
初始化集合时尽量指定容量,如果不确定,就写16
-
使用泛型数据类型时,一定就是引用数据类型
LinkedList
怎么办?? 用它自己创建:
Vector
效率太低,一般只出现在面试里
1.2 Set(几乎不用)
继承自Collection接口。
Set:无序(添加的先后顺序),不可重复
无序,那就不好取值
HashSet
-
没有get方法,难以单独获取某一个元素
-
如果传入的是引用数据类型:
TreeSet
排序规则:
要排序的对象的类,必须实现comparable接口
comparable接口是个泛型接口
String和Integer实现了!!所以不会报错
- 当参数传入的是Integer型的数字:
- 当参数传入的是String型:
- 当参数传入的是引用数据类型会报错:
那实现了comparable接口,引用数据类型咋排序??
自己写排序规则:
LinkedHashSet(一般不用)
2、Map<K,V>:存放对值的最大父接口
Map(最常用 ),映射,保存具有映射关系的数据,key和value可以是任意的引用数据类型,key唯一
- List和Set两个接口都继承自Collection接口
Map接口:存储对值,key唯一,value可重复,无序添加的先后顺序
HashMap面试90%必问原理
根据key取value用get():
**- 它的内部存储结构:
1、JDK1.7之前:链表 + 二叉树
2、JDK1.8以及之后:链表 + 数组 + 红黑树**
Hashtable (t就是小写)
和HashMap 几乎一模一样
LinkedHashMap
内部是链表
Properties(Hashtable的子类)(重要)
更多的用于操作属性文件,重要且单一
二、集合遍历
List集合的遍历(最简单)
遍历:把每个属性都访问一遍
1、for循环
2、增强for循环,其实它的原理就是迭代器
3、迭代器
它是个接口,
Set集合的遍历
1、增强for循环(原理就是迭代器),不能用普通的for循环
2、迭代器
先生成一个迭代器
Map集合的遍历(重点)
1、增强for循环(原理就是迭代器)
2、迭代器
迭代中删除元素问题
没删干净!!!!数组删完后有移位问题,List自己移位了
怎么解决??
1、回调指针
2、逆序遍历删除
3、使用迭代器(推荐使用)
4、增强for循环
三、其他的集合
LinkedHashMap:在HashMap的基础上维护了一个双向链表
TreeMap:天然支持排序
Colletions : Collection的一个工具类
四、比较接口
comparator是个泛型的函数式接口:做临时排序(用的时候就写)
comparable接口:自然排序,排序规则固定
五、一个并发修改问题(面试题)
开发一般不用
并发修改异常
增强for循环底层是迭代器,而迭代器是依赖于集合而存在,在判断成功后,集合中增加了元素,
迭代器不知道,所以报错!!!(集合删除,迭代器遍历,还互相不知道,就报错~!!!!)
相当于两个人在干活
解决:
1、迭代器遍历元素,迭代器删除元素
2、普通for循环遍历,集合删除
六、集合总结
需要掌握的 :
1、如何创建需要的集合,通常使用多态创建,主要用到的是List和Map
2、各种区别,理解不了就背下来
3、各种集合API的调用
4、两个比较的接口
5、最重要的集合
ArrayList和HashMap、
List、Map
6、各种集合的特点(必须会,理解不了就背)
从接口层面到实现类层面
7、重点集合的内部结构 ArrayList、HashSet、HashMap
8、各种集合的遍历
9、并发问题(面试可能会问)
七、积压问题:
1、sychronized 原理
2、ReentrantLock 原理
3、ArrayList、LinkedList 、原理
4、HashMap(重灾区)、HashSet原理
List--Map--Set
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: