Java集合学习

集合的引入和ArrayList

集合和数组的对比
相似点:都可以存储多个对象,对外作为一个整体存在
数组的缺点:
- 长度必须在初始化时指定,且固定不变
- 数组采用连续存储空间,删除和添加效率低下
- 数组无法直接保存映射关系
- 数组缺乏封装,操作繁琐

集合框架

  • Collection:List,Set
  • Map

List:对象不唯一但有序
Set:对象唯一但无序
Map:键值对象,提供key到value的映射。key唯一无序,value不唯一有序

List集合

List的主要实现类有ArrayList和LinkedList,分别是顺序表和链表(双向链表)的实现。栈和队列的实现类为:Deque和Queue

ArrayList


//创建一个集合对象
List list = new ArrayList();

//添加元素
list.add(90);
list.add(1,100);
list.addAll(List2);

//元素的数量
list.size();

//遍历元素
System.out.println(list.toString());
//方法一:for循环
for(int i = 0; i < list.size(); i++){
	int elem1 = (int)list.get(i);
	System.out.println(i+"---->"elem1);
}
//方法二:foreach
for(Object elem2:list){
	System.out.println(elem2);
}
//Iterator迭代器
Iterrator it = list.iterator();
while(it.hasNext()){
	int elem3 = (int)it.next();
	System.out.println(elem3);
}
//Lambda表达式+流式编程
list.forEach((i)->System.out.println(i));
//上面简写
list.forEach(System.out::println);


缺点

  • 添加元素可以添加任何类型,不安全
  • 获取元素时需要进行强制类型转换,繁琐

解决
使用泛型generic

List<Integer> list = new ArrayList<Integer>();

Iterrator<Integer> it = list.iterator();
while(it.hasNext()){
	int elem3 = (int)it.next();
	System.out.println(elem3);
}

LinkedList

数据结构为双向链表
提供了更多的方法,可以作为线性表、栈、队列来使用

Deque 栈接口

  • ArrayDeque:底层使用数组
  • LinkedList:底层使用双向链表

方法:

  • push():入栈
  • peek():获取栈顶元素
  • pop():出栈

Queue队列接口

Set集合类型

Set:无序,不重复
HashSet
LinkedHashSet
TreeSet:红黑树(二叉树)

比较规则的制定

Comparator接口
外部比较器优先内部比较器

哈希表原理

Java中哈希表结构:顺序表+链表(需要控制链表长度)
哈希表是如何添加数据的

  1. 计算哈希码,结果是一个int值,整数的哈希码取自身
  2. 计算在哈希表中的存储位置:y=k(x)=x%11
  3. 存入哈希表:一次添加成功;多次添加成功;不添加

hashCode和equals的作用

  • hashCode():计算哈希码,是一个整数,根据哈希码可以计算出数据在哈希表中的存储位置
  • equals():添加时出现了冲突,需要通过equals进行比较,判断是否相同,查询时也需要

Map

Map特点:存储键值对映射关系

  • HashMap:key无序
  • LinkedHashMap:key有序(添加顺序)
  • TreeMap:key有序(自然顺序)

Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set

Map最多的四个操作:

  1. 创建对象Map<String,String> map = new TreeMap();
  2. 添加key-value键值对:map.put(key,value);
  3. 根据key得到value:map.get(key);
  4. 遍历Map:Set<Map.Entry<String,String>> entry = map.entrySet();

其他内容

Iterator
常用方法

  • hasNext():判断是否有下一个元素
  • next():返回要访问的下一个元素
  • remove():删除上次访问的对象

哪些集合可以使用Iterator遍历:

  1. Collection,List,Set可以,Map不行
  2. 提供iterator()方法的就可以
  3. 实现Iterable接口的集合类都可以
    Collections工具类
    关于集合操作的工具类,好比Arrays,Math
    唯一的构造方法private,不允许在类的外部创建对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值