什么是集合?有什么用?
集合实际上就是一个容器。可以用来容纳其他类型的数据
为什么说集合在开发中使用较多?
集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,将一个数据一个一个展现出来。
集合存储的是什么?
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说集合中存储的时引用)。
集合在java JDK中哪个包下?
java.util.*包下,所有的集合类和集合接口都在java.util包下
集合框架图:
Collection中能存放什么元素?
没有使用"泛型"之前,Collection中可以存放Object的所有子类型。
使用了"泛型"之后,Collection中只能存储某个具体的类型。
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);
Collection collection = new ArrayList();
collection.add(100);
collection.add(3.14);
collection.add(new Object());
collection.add(true);
System.out.println(collection.size());
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());
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));
判断集合中元素的个数是否为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());
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());
}
通过iterator()方法拿到迭代器,然后进行while循环,使用hasNext()方法判断,如果有就继续循环,没有就退出
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());
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));
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"));
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));
}
Set接口时Collection的子接口,seti接口没有提供额外的方法
Set集合不允许包含相同的元素,如果把两个或多个相同的元素加入同一个Set集合中,则添加操作失败。
Set判断两个对象是否相同不是使用==运算符,而是根据equals()方法
作为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,即相同的元素只能添加一个
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的子类,再添加数据的同时,每个数据还维护了两个引用来记录此数据的前一个数据和后一个数据
1、Map和Collection没有继承关系。
2、Map集合以Key和Value的方式存储数据:键值对
key和value都是引用数据类型
key和value都是存储对象的内存地址
key起主导的地位,value是key的一个附属品
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
System.out.println(map);
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("皮皮虾"));
Map<Integer,Object> map = new HashMap<>();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
map.remove(2);
System.out.println(map);
通过key删除键值对
方式一:在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());
}
觉得博主写的不错的读者大大们,可以点赞关注和收藏哦,谢谢各位!
博主更多博文