集合 容器
用来存储对象的对象
数组的弱点: 增删麻烦 扩容麻烦
集合: 对数组的封装, 把常用的数组操作预先实现好
Collection
特点: 元素是对象
常用方法:
方法 | 作用 |
---|---|
add(Object o) | 将元素o放入集合 |
addAll (Collection c) | 将集合c中所有元素放入集合 |
clear() | 清空集合 |
contains(Object o) | 判断集合中是否存在元素o |
remove(Object o) | 删除元素o |
size() | 获得集合长度 集合中元素的个数 |
toArray() | 将集合转为Object[] |
遍历
- 迭代
Iterator it = list.iterator();
while(it.hasNext()) {
Object o = it.next();
String s = (String)o;
System.out.println(s.toUpperCase());
}
- for-each
for(Object o : list) {
String s = (String)o;
System.out.println(s.toUpperCase());
}
- forEach()
list.forEach(new Consumer<String>() {
public void accept(String s) {
System.out.println(s);
}
});
list.forEach(s->System.out.println(s));
list.forEach(System.out::println);
List Collection的子接口
特点: 元素按照下标顺序存储, 可以重复
常用方法:
方法 | 作用 |
---|---|
add(int pos , Object o) | 将对象o插入到pos下标 |
get(int pos) | 获得pos下标的元素 |
indexOf(Object o) | 获得对象o在集合中的首次出现的下标 -1表示元素不存在 |
remove(int pos) | 删除pos下标的元素 |
遍历
- 下标遍历
for(int i = 0 ; i < list.size() ; i++) {
Object o = list.get(i);
String s = (String)o;
System.out.println(s.toUpperCase());
}
- 迭代遍历
- for-each
实现类
- ArrayList 用数组实现 查询快 增删慢 1.2 线程不安全 快
- LinkedList 用链表实现 增删快 查询慢
- Vector 用数组实现 1.0 线程安全 慢
Set Collection的子接口
特点: 元素没有顺序,不按照下标存储, 元素内容不可重复
Set Collection的子接口
特点: 元素没有顺序,不按照下标存储, 元素内容不可重复
常用方法: 无
遍历: 同Collection
实现类:
-
HashSet 底层存储结构: 链表数组
保证元素内容不重复:
-
覆盖对象的hashCode()方法, 保证相同的对象返回相同的整数
-
覆盖对象的equals()方法, 保证相同的对象equals返回true
-
为了提高效率, 尽量实现不同的对象,哈希码不同
散列表 (分散排列) 查询效率和增删效率都高, 缺点: 空间大
-
-
LinkedHashSet HashSet的子类 遍历时按照元素添加的顺序遍历
-
(一般了解) TreeSet SortedSet(Set的子接口) 的实现类 自动对元素进行从小到大的排序
Map
特点: 元素是键值对 键对象 — 值对象
key: 无顺序(无下标) 内容不可重复 value:可以重复
常用方法
方法 | 作用 |
---|---|
get(Object key) | 通过key,查找对应的值(value) |
put(Object key , Object value) | 把key-value 添加到Map中 , 如果key已存在, 新的value替换旧的value |
remove(Object key) | 删除key所对应的键值对 |
containsKey(Object key) | 判断Map中是否存在key |
containsValue(Object value) | 判断Map中是否存在value |
size() | 获得Map中键值对的数量 |
遍历
-
keySet() 返回Map中所有的key的集合 Set
Set<Integer> keys = map.keySet(); for(Integer k : keys) { String v = map.get(k); System.out.println(k+" --- "+v); }
-
values() 返回Map中所有的value的集合 Collection
Collection<String> vs = map.values(); for(String v : vs) { System.out.println(v); }
-
forEach()
map.forEach((k,v)->System.out.println(k+"---"+v));
实现类
1. HashMap 利用Hash算法保证key的内容不重复 1.2 线程不安全 允许用null作为key或value
2. LinkedHashMap HashMap的子类, 遍历时按照元素添加的顺序遍历
3. (一般了解 ) TreeMap SortedMap(Map的子接口) 的实现类 自动对key进行从小到大的排序
4. Hashtable 1.0 线程安全 不允许用null作为key或value
5. (一般了解 ) Properties Hashtable的子类 key和value都是String 通常用于配置文件的读取和处理
泛型
在类或方法中,可以将类型作为变量, 而避免硬编码
在集合中, 泛型用来约定集合中元素的类型, 从而实现类型安全的集合
List list = new ArrayList(); 等号左右的泛型,必须一致,不能使用多态
List<String> list = new ArrayList<String>(); // list中只能存放String对象
list.add("Liucy");
list.add("Huxz");
list.add("Wudh");
list.add("Qiqy");
list.add(10); // error list中只能添加String对象
for(int i = 0 ; i < list.size() ; i++) {
String s = list.get(i); // 不需要强制类型转换
System.out.println(s);
}