1 集合(集合是java中提供的一种容器,可以用来存储多个数据)
1.1 集合体系结构
a 集合主要分为两大系列:Collection和Map,Collection表示一组对象,Map表示一组映射关系或键值对
b Collection根接口 子接口 List Set Queue …
public class TestCollection {
public static void main(String[] args) {
Collection<String> objects = new ArrayList<>();
objects.add("aa");
objects.add("bb");
System.out.println("objects = " + objects);
System.out.println("objects.size() = " + objects.size());
System.out.println("objects.contains(\"aa\") = " + objects.contains("aa"));
System.out.println("objects.toArray() = " + objects.toArray());
System.out.println("objects.remove(\"aa\") = " + objects.remove("aa"));
System.out.println("objects.size() = " + objects.size());
objects.clear();
System.out.println("objects.isEmpty() = " + objects.isEmpty());
Collection objects1 = new ArrayList();
objects1.add(1);
objects1.add(1);
objects1.add(1);
objects.addAll(objects1);
System.out.println(objects);
}
}
1.2 Iterator迭代器
(1) 作用:遍历集合中所有元素
(2) 作用:并不是所有的集合都能使用Iterator迭代器,前提条件是Iterator的接口子接口(如Map就无法使用)
public class TestIter {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
Iterator<String> iterator = coll.iterator();
while (iterator.hasNext()){
System.out.println("iterator.next() = " + iterator.next());
}
}
}
(3) 不要在使用Iterator迭代器进行迭代时,调用Collection的remove(XX)方法,否则会报异常或者出现不确定行为
1.3 增强for循环
(1)迭代器代码进行简化编写,在JDK1.5开始提供简写方式,成为增强for循环,底层是迭代器
(2)语法:
for(元素类型 名称 : 要遍历的集合或数组){
}
for(String item: arrays){
}
2 List接口
(1)List接口特点。
a List接口是Collection接口的子接口。
b List存储是有序的,可以有重复元素。
c List接口有很多实现类,List底层结构可以是数组、链表。
(2) List常用方法。
public class TestList {
public static void main(String[] args) {
List<String> l =new ArrayList<>();
l.add("a");
l.add("b");
l.add("c");
for (int i = 0; i < l.size(); i++) {
System.out.println("l.get(i) = " + l.get(i));
}
for (String s : l){
System.out.println("s = " + s);
}
l.remove("a");
System.out.println("l.size() = " + l.size());
l.set(0, "f");
for (String s : l){
System.out.println("s = " + s);
}
}
}
(3)List实现类(ArrayList(),Vector(),LinkedList())
ArrayList:
-数据存储结构是数组结构,元素增删慢,查找快
创建List集合,有三部分:Object数组,size,modCount
Object数组默认大小是0
向集合添加数据(长度为10–任意),Object数组大小变成10
向数组中添加数据超过了10,进行扩容,1.5倍
Vector:
语法:List l =new Vector<>();
数据存储结构与ArrayList相同,都是数组,解决线程安全问题
Vector方法上添加synchronized
Vector扩容是2倍大小
a 创建 vector对象时,有四部分,
Obejct数组初始值是10,elementCount(元素个数)、capacityIncrement,默认是0,modCount版本默认是0
LinkedList:
语法:List l =new LinkedList<>();
数据存储结构:链表(双向)
创建LinkedListd对象,包含四部分,size元素数量,first,last,modcount
添加元素的时候,第一次添加元素的时候作为首节点和尾节点。
再次添加时在首节点下一个节点添加一个节点,并指向上一个节点。
3 Set接口
a Collection子接口
b Set接口不能重复,无序
c Set遍历可以使用迭代器,增强for循环,常用实现类有HashSet、TreeSet、LinkedHashSet.
d HashSet底层是HashMap,LinkedHashSet是HashSet子类。TreeSet底层是TreeMap,使用红黑树
e HashSet底层是HashMap,向Set集合添加数据,会成为map集合中key值
public class TestSet {
public static void main(String[] args) {
Set<String> objects = new HashSet<>();
objects.add("aaa");
objects.add("aaa");
objects.add("aaa");
objects.add("bb");
for (String value:objects) {
System.out.println("value = " + value);
}
}
}
- 补充内容
使用LinkedList实现栈(先进后出)和队列(先进先出)操作
3.1 ListIterator是Iterator的子接口,遍历List集合。向前遍历
4 Map集合
Map中不能包含重复的键,值可以重复,每个键只能对应一个值
4.1 常用方法
a 添加方法 put(K key, V value)
b 根据key获取对应的value值 get(key)
c 移除 remove(key)
d 返回map集合所有key Set keySet()
e 返回map集合所有value值 Collection values()
f 清空map集合 clear()
public class TestMap {
public static void main(String[] args) {
Map<String, String> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("12","张三");
objectObjectHashMap.put("13","张5");
objectObjectHashMap.put("14","张4");
objectObjectHashMap.put("15","张");
System.out.println("objectObjectHashMap.get(\"15\") = " + objectObjectHashMap.get("15"));
System.out.println("objectObjectHashMap.keySet() = " + objectObjectHashMap.keySet());
System.out.println("objectObjectHashMap.values() = " + objectObjectHashMap.values());
System.out.println("objectObjectHashMap.remove(\"14\") = " + objectObjectHashMap.remove("14"));
System.out.println("objectObjectHashMap = " + objectObjectHashMap);
objectObjectHashMap.clear();
System.out.println("objectObjectHashMap = " + objectObjectHashMap);
}
}
4.2 集合遍历
第一种:获取map中所有key,根据key获取vaule值
Set<String> strings = objectObjectHashMap.keySet();
for (String ss:strings) {
String va = objectObjectHashMap.get(ss);
System.out.println(ss+":"+va);
}
第二种:直接获取map里面的key-value关系,获取key和value
Set<Map.Entry<String, String>> entries = objectObjectHashMap.entrySet();
for (Map.Entry<String, String> s: entries) {
System.out.println(s.getKey()+":"+s.getValue());
}