🌈Java✨学习笔记✨ (十一)⏩集合详解(Collection、Map、Set、List)
Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈
欢迎各位小伙伴们关注我的公众号:JavaCodes,名称虽带Java但涉及范围可不止Java领域噢😁,会长期分享博文或者福利,期待您的关注❤
1、集合概述
什么是集合?有什么用?
集合实际上就是一个容器。可以用来容纳其他类型的数据
为什么说集合在开发中使用较多?
集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,将一个数据一个一个展现出来。
集合存储的是什么?
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说集合中存储的时引用)。
集合在java JDK中哪个包下?
java.util.*包下,所有的集合类和集合接口都在java.util包下
集合框架图:
2、Collection接口常用方法
Collection中能存放什么元素?
没有使用"泛型"之前,Collection中可以存放Object的所有子类型。
使用了"泛型"之后,Collection中只能存储某个具体的类型。
2.1、add()和remove()方法
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
System.out.println(collection);
自动装箱原理(java5新特性)实际上放进去了一个对象的内存地址
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
//移除
collection.remove(100);
collection.remove(true);
System.out.println(collection);
2.2、size()方法
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
System.out.println(collection.size());
2.3、clear()方法
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
collection.clear(); //清空
System.out.println(collection.size());
2.4、contains()方法
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
System.out.println(collection.contains(100));
System.out.println(collection.contains(3));
2.5、isEmpty()方法
判断集合中元素的个数是否为0
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
System.out.println(collection.isEmpty());
//清空集合
collection.clear();
System.out.println(collection.isEmpty());
3、Collection集合迭代(重点)
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口
Iterator遍历方式一
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(true);
//获取迭代器对象
Iterator it = collection.iterator();
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
如果超出范围就会报错
Iterator遍历方式二(不推荐)
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(true);
//获取迭代器对象
Iterator it = collection.iterator();
for (int i = 0; i < collection.size(); i++) {
System.out.println(it.next());
}
Iterator遍历方式三(推荐)
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(true);
//获取迭代器对象
Iterator it = collection.iterator();
//hasNext()有下一个就继续,没有就退出
while (it.hasNext()) {
System.out.println(it.next());
}
3.1、Iterator迭代原理
通过iterator()方法拿到迭代器,然后进行while循环,使用hasNext()方法判断,如果有就继续循环,没有就退出
4、List接口常用方法
4.1、add()和remove()方法
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(1,"皮皮虾");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
add(int index, E element)方法使用不多,因为效率较低。
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
System.out.println(list.size());
list.remove(1);
System.out.println(list.size());
4.2、get()方法
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(1,"皮皮虾");
System.out.println(list.get(1));
4.3、indexOf()lastIndexOf()和方法
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
System.out.println(list.indexOf("A"));
//获取a最后一次出现位置的索引
System.out.println(list.lastIndexOf("a"));
4.4、set()方法
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
list.set(0,"A");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
5、Set
Set接口时Collection的子接口,seti接口==没有提供额外的方法==
Set集合不允许包含相同的元素,如果把两个或多个相同的元素加入同一个Set集合中,则添加操作失败。
Set判断两个对象是否相同不是使用==运算符,而是根据equals()方法
5.1、HashSet
==作为Set的主要实现类:线程不安全,可以存储null值==
Set<Object> objects = new HashSet<>();
objects.add(true);
objects.add("hello3");
objects.add("hello1");
objects.add("hello4");
objects.add("hello2");
objects.add("hello1");
objects.add(18);
System.out.println(objects);
==1. 无序性:不等于随机性,存储的数据在底层数组中并非按照索引的顺序添加,而是根据数据的哈希值决定
2.不可重复性:保证添加的元素按照equals()判断时,不能返回true,即相同的元素只能添加一个==
5.2、LinkedSet
==HashSet的子类,遍历其内部数据时,可以按照添加的顺序遍历==
Set<Object> list = new LinkedHashSet<>();
list.add(true);
list.add("hello3");
list.add("hello1");
list.add("hello4");
list.add("hello2");
list.add("hello1");
list.add(18);
System.out.println(list);
LinkedHashSet作为HashSet的子类,再添加数据的同时,每个数据还维护了两个引用来记录此数据的前一个数据和后一个数据
6、Map常用方法
1、Map和Collection没有继承关系。
2、Map集合以==Key==和==Value==的方式存储数据:键值对
key和value都是引用数据类型
key和value都是存储对象的内存地址
key起主导的地位,value是key的一个附属品
6.1、put()方法
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
System.out.println(map);
6.2、containsKey()和containsValue()方法
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.put(4,"王五");
System.out.println(map.containsKey(3));
System.out.println(map.containsKey(5));
System.out.println(map.containsValue("王五"));
System.out.println(map.containsValue("皮皮虾"));
6.3、remove()与get()方法
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.remove(2);
System.out.println(map);
通过key删除键值对
6.4、Map遍历(重要)
方式一:在for循环中使用entries实现Map的遍历
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
for (Map.Entry<Integer,Object> entry: map.entrySet()) {
System.out.println(entry);
}
这种方式效率高,因获取key和value都是直接从node对象中获取的属性值
方式二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
for (Integer key : map.keySet()) {
System.out.println(key);
}
for (Object value : map.values()) {
System.out.println(value);
}
方式三:通过迭代器遍历
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
Iterator<Map.Entry<Integer, Object>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
❤最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以一键三连哦!,感谢支持,我们下次再见~~~,不,我们天天见😊
欢迎各位小伙伴们关注我的公众号:JavaCodes,名称虽带Java但涉及范围可不止Java领域噢😁,会长期分享博文或者福利,期待您的关注❤
- 点赞
- 收藏
- 关注作者
评论(0)