List:
List<String> list = new ArrayList<>(); //List存放的数据允许重复的
list.add("aaa"); //添加
list.add(1, "ddd"); //插入
list.remove(1); //删除
list.set(3, "ddd"); //修改
System.out.println(list.size()); // 获得长度
/**
* 普通for循环
* - 语法相对复杂,但是可以处理和下标相关的操作
*
* 增强for循环
* - 语法比较简单,一般处理和下标无关的操作
*
* 迭代器: 基本不用
*/
// 遍历,方式1: 普通for循环:
for (int i = 0; i < list.size(); i++) {
//获得指定下标的数据,list是有序的
String str = list.get(i);
System.out.println(str);
}
// 遍历方式2: 增强for循环
for (String str : list) {
System.out.println(str);
}
// 遍历方式3:迭代器
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
}
Set:
Set<String> set = new HashSet<>(); //<E>,语法称为泛型、Set集合的元素不能重复
set.add("aa"); //添加
set.remove("bb"); //删除
int size = set.size(); // 获得集合的长度
set.contains("aa"); //判断集合是否包含指定对象
set.clear(); //清空集合
System.out.println(set.isEmpty()); // 判断集合是否为空,即是有数据
Object[] array = set.toArray(); //集合转数组
/**
遍历:
方法1:增强for循环:
方法2:迭代器:
注意:hashSet是无序的
*/
for (String str : set) {
System.out.println(str);
}
Iterator<String> iterator = set.iterator();//① 获得集合的迭代器: iterator()
while(iterator.hasNext()) { //② 循环遍历,判断是否有数据
String str = iterator.next(); //③ 取出数据
System.out.println(str);
}
/**
* 其他:
* ==:始终是判断内存地址是否一致
* hashCode():默认是返回内存地址的编码
* equals():默认也是判断内存地址是否一致
* 需要自定义,重写hashCode()和equals()
*/
Map:
/**
* 存放的是键值对 k-v
* key和value可以是引用类型,一般key都是String
* key的数据必须是惟一的,value可以重复
* Map是接口,有两个实现类: HashMap,TreeMap
*
* 用法: 添加、删除、修改、查询(所有的操作都是key相关)
* 添加: put(key, value)
* 修改: put(key, value)
* 删除: remove(key);
* 查询:
* entrySet -> entry.getKey(), entry.getValue()
* keySet -> key, map.get(key)
*/
Map<Integer, String> gjs = new HashMap<>(); //创建map集合
gjs.put(2006, "中国"); //添加数据
gjs.put(2006, "意大利");//修改数据: 如果key不存在,则添加。如果存在,则修改
gjs.remove(2014); //删除
//遍历:
//方法1:推荐, 获得Entry的实例对象Set集合,然后Entry获得key和value
Set<Entry<Integer, String>> entrySet = gjs.entrySet();
for (Entry<Integer, String> entry : entrySet) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " : " + value);
}
//遍历
//方法2: 获得key的set集合,然后通过key获得value
Set<Integer> keySet = gjs.keySet(); //获得key的set集合
for (Integer key : keySet) {
String value = gjs.get(key); //根据key获得value
System.out.println(key + " -- " + value);
}
集合:
集合和数组的区别:
集合存放的数据是引用类型,长度是可变的
数组存放的数据是任意类型,长度是固定的
体系:
Collection:存放单一对象
- Set : 不能重复,无下标
-- HashSet:基于哈希码散列存放
-- TreeSet:基于二叉树存放,去重
- List : 可以重复,有下标
-- ArrayList: 基于数组存放,线程不安全 优点查询快,缺点删除、插入慢
-- LinkedList:基于双向链表存放的 优点删除/插入快,缺点是查询慢
-- Vector:基于数组存放,线程安全
- Map: 存放键值对
- Iterator:迭代器,用于遍历Collection集合
- 比较器:Comparable、Comparator,用来制定排序规则
- 工具集: Collections
Collections
/**
* Collection集合的工具集
*/
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//二分法查找
int index = Collections.binarySearch(list, "ccc");
System.out.println(index);//① 如果找不到返回负数 ②只能适合有序数组
//求最大和最小
System.out.println(Collections.max(list));
System.out.println(Collections.min(list));
//统计元素出现的次数
System.out.println(Collections.frequency(list, "aaa"));