集合概述
- Java中的集合是工具类,可以存储任意数量的具有共同属性的对象。与数组不同,集合的长度可以动态改变,所以数组适合去存储固定长度的数据,集合适合去存储不固定长度的数据。
- 集合的应用场景:
1)无法预测存储数据的数量。
2)存储具有一对一关系的数据(比如某件商品,其商品编号只对应这件商品)。
3)需要进行数据的增删。
4)数据重复问题。
集合框架的体系结构
Collection:(类的对象) 三个子接口:
List:(序列) 有序的、允许重复的 主要实现类:
ArrayList:长度动态增长的数组
Queue:(队列) 有序的、允许重复的 主要实现类:
LinkedList:链表的内容
Set:(集)无序的、不允许重复的 主要实现类:
HashSet:哈希值
Map:(键值对)主要实现类:
HashMap:哈希表
List集合
List(列表):
1)元素有序 可重复 -----称为序列 1223
2)可以 精确 的控制 每个元素的插入位置,或删除某个位置的元素
3)主要有两个实现类 ArrayList LinkedList
ArrayList和数组比较相似,不同就是ArrayList存储个数会动态变动的。
ArrayList:
1)底层是由数组实现的
2)长度 动态增长
3)在列表尾部 插入或删除数据 非常有效
4)但在列表中间插入数据时会产生大量的元素复制,效率较低,所以更适合 查找与更新新数据
5)元素可以为null值
常用方法使用:
List list = new ArrayList();//导入java.util包
list.add("Java"); //添加数据
list.size(); //列表中元素个数
list.get(int i); //显示列表中i处元素
list.remove(int index); //移除i处元素
list.remove(Object o); //移除列表中元素
list.contains(Object o); //查询列表中是否包括某个对象
Set集合
- Set:元素无序并且不可以重复的集合,被称为集。
- HashSet:
1)元素无序且不可重复,HashSet是Set的一个重要实现类,称为哈希集;
2)HashSet中只允许有一个null元素;
3)具有良好的存取和查找性能。
4)HashSet中的元素无序并且不可以重复
5)HashSet的底层其实是HashMap。
6)HashSet默认容量是16,默认的加载因子为0.75
什么是加载因子(负载因子/装载因子)?
用于表示哈希表中元素填满的程度。
冲突的机会越大,则查找的成本越高。反之,查找的成本越低,从而查找的时间越少。
HashMap中的加载因子
①new HashMap();
初始容量是16,加载因子loadFactor=0.75,默认容量是16*0.75=12
②new HashMap(int initialCapacity);
给定自定义的loadFactor.
③new HashMap(int initialCapacity, fload loadFactor);
自定义初始容量,自定义加载因子。
常用方法
迭代器:Iterator接口可以以统一的方式对各种集合元素进行遍历
hasNext():检测集合中是否还有下一个元素
next():返回集合中的下一个元素
把集合添加到迭代器中:(导入包)Iterator 迭代器名=集合名.iterator()方法
遍历迭代器并输出:
Map
Map是一个接口,无法进行实例化操作。
可以定义一个引用指向HashMap()的方法构造一个Map类,
添加键值对
向Map中添加元素时使用 对象名.put(key, value)的方法添加键值对。
遍历Map
方法一:使用iterator定义一个引用,在指向Map的实例化对象中使用对象名.values()f返回Map类中所有值的内容。
Iterator<String> it = objName.values().iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
方法二:使用指向Map的实例化对象调用 entrySet() 方法,返回一个集合,集合里面包含了Map类当中所有的键值对。
Set<Map.Entry<String, String>> entries = objName.entrySet();
for (Map.Entry<String, String> en : entries) {
System.out.print(en.getKey()+"-");;
System.out.println(en.getValue());
}
查找某个key
keySet()方法将map中所有key值的取出,返回值是个只存放key值的Set集合
Set<String> keySet = objName.keySet();
for (String key : keySet) {
if (strSearch.equals(key)) {
System.out.println("找到了!"+"键值对为:"+key+"-"+objName.get(key));
break;
}
}
检查是否存在某个键
objName.containsKey(keyName);