一、集合的框架体系(重要,背!!!)
1.Collection(单列集合,只存放value)
2.Map(双列集合,存放key-value)
二、Collection接口
1.特点
使用了Collection接口的子类
- 可以存放多个元素,每个元素可以是Object
- 有些子类可以存放重复元素,有些子类不可以
- List的存放是有序的,Set的存放是无序的
事实上,没有直接使用Collection接口的子类,都是通过它的子接口List和Set来实现的。
2.常用方法
import java.util.ArrayList;
import java.util.List;// 以ArrayList为例
public class CollectionMethod {public static void main(String[] args) {List list = new ArrayList();//add:添加单个元素list.add("jack");list.add(10);//list.add(new Integer(10))list.add(true);//remove:删除指定元素list.remove(0);//删除第一个元素list.remove(true);//指定删除某个元素//contains:查找元素是否存在System.out.println(list.contains("jack"));//T//size:获取元素个数System.out.println(list.size());//2//isEmpty:判断是否为空System.out.println(list.isEmpty());//F//clear:清空list.clear();//addAll:添加多个元素ArrayList list2 = new ArrayList();list2.add("红楼梦");list2.add("三国演义");list.addAll(list2);//containsAll:查找多个元素是否都存在System.out.println(list.containsAll(list2));//T//removeAll:删除多个元素list.add("聊斋");list.removeAll(list2);}
}
3.遍历方式
Iterator(迭代器)
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class CollectionIterator {public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演义", "罗贯中", 10.1));col.add(new Book("小李飞刀", "古龙", 5.1));col.add(new Book("红楼梦", "曹雪芹", 34.6));//现在老师希望能够遍历 col 集合//1. 先得到 col 对应的 迭代器Iterator iterator = col.iterator();//2. 使用 while 循环遍历while (iterator.hasNext()) { //判断是否还有数据Object obj = iterator.next(); //返回下一个元素,类型是 ObjectSystem.out.println("obj=" + obj); }//3. 当退出 while 循环后 , 这时 iterator 迭代器,指向最后的元素//iterator.next();//NoSuchElementException//4. 如果希望再次遍历,需要重置我们的迭代器iterator = col.iterator();System.out.println("===第二次遍历===");while (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}}
}class Book {private String name;private String author;private double price;public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
//老师教大家一个快捷键,快速生成 while => itit
//显示所有的快捷键的的快捷键 ctrl + j
for 循环增强
三、List接口
1.特点
2.常用方法
import java.util.ArrayList;
import java.util.List;public class ListMethod {public static void main(String[] args) {List list = new ArrayList();list.add("张三丰");list.add("贾宝玉");//void add(int index, Object ele):在 index 位置插入 ele 元素list.add(1, "韩顺平");//boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来List list2 = new ArrayList();list2.add("jack");list2.add("tom");list.addAll(1, list2);//Object get(int index):获取指定 index 位置的元素//int indexOf(Object obj):返回 obj 在集合中首次出现的位置System.out.println(list.indexOf("tom"));//2//int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置list.add("韩顺平");System.out.println(list.lastIndexOf("韩顺平"));//Object remove(int index):移除指定 index 位置的元素,并返回此元素list.remove(0);//Object set(int index, Object ele):设置指定 index 位置的元素为 ele , 相当于是替换.list.set(1, "玛丽");//List subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合// 注意返回的子集合 fromIndex <= subList < toIndexList returnlist = list.subList(0, 2);System.out.println("returnlist=" + returnlist);}
}
3.遍历方式
4.ArrayList
4.1 ArrayList的底层结构和源码分析
5.Vector
5.1 Vector的底层结构和源码分析
5.2 Vector 和 ArrayList 的比较
6.LinkedList
6.1 LinkedList 的底层操作机制
6.2 ArrayList 和 LinkedList 比较
四、Set接口
1.特点
2.常用方法
和 List 接口一样, Set 接口也是 Collection 的子接口,因此,常用方法和 Collection 接口一样.
3.遍历方式
4.HashSet
public class HashSet01 {public static void main(String[] args) {HashSet set = new HashSet();//说明//1. 在执行 add 方法后,会返回一个 boolean 值//2. 如果添加成功,返回 true, 否则返回 falseSystem.out.println(set.add("john"));//TSystem.out.println(set.add("lucy"));//TSystem.out.println(set.add("john"));//FSystem.out.println(set.add("jack"));//TSystem.out.println(set.add("Rose"));//T//3. 可以通过 remove 指定删除哪个对象set.remove("john");System.out.println("set=" + set);//3 个//set指向一个新对象set = new HashSet();System.out.println("set=" + set);//0//4 Hashset 不能添加相同的元素/数据?set.add("lucy");//添加成功set.add("lucy");//加入不了set.add(new Dog("tom"));//OKset.add(new Dog("tom"));//OkSystem.out.println("set=" + set);}
}class Dog { //定义了 Dog 类private String name;public Dog(String name) {this.name = name;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +'}';}
}
4.1 HashSet的底层机制
4.2 LinkedHashSet
5.TreeSet
五、Map接口
1.特点
2.常用方法
import java.util.HashMap;
import java.util.Map;@SuppressWarnings({"all"})
public class MapMethod {public static void main(String[] args) {//演示 map 接口常用方法Map map = new HashMap();//增加map.put("邓超", new Book("", 100));//OK//替换map.put("邓超", "孙俪");map.put("王宝强", "马蓉");//OKmap.put("宋喆", "马蓉");//OKmap.put("刘令博", null);//OKmap.put(null, "刘亦菲");//OK//remove:根据键删除映射关系map.remove(null);//get:根据键获取值Object val = map.get("鹿晗");//size:获取元素个数System.out.println("k-v=" + map.size());//isEmpty:判断个数是否为 0System.out.println(map.isEmpty());//F//clear:清除 k-v//map.clear();//containsKey:查找键是否存在System.out.println("结果=" + map.containsKey("hsp"));//T}
}class Book {private String name;private int num;public Book(String name, int num) {this.name = name;this.num = num;}
}
3.遍历方式
import java.util.*;@SuppressWarnings({"all"})
public class MapFor {public static void main(String[] args) {Map map = new HashMap();map.put("邓超", "孙俪");map.put("王宝强", "马蓉");map.put("宋喆", "马蓉");map.put("刘令博", null);map.put(null, "刘亦菲");map.put("鹿晗", "关晓彤");//第一组: 先取出 所有的 Key , 通过 Key 取出对应的 ValueSet keyset = map.keySet();//(1) 增强 forSystem.out.println("-----第一种方式-------");for (Object key : keyset) {System.out.println(key + "-" + map.get(key));}//(2) 迭代器System.out.println("----第二种方式--------");Iterator iterator = keyset.iterator();while (iterator.hasNext()) {Object key = iterator.next();System.out.println(key + "-" + map.get(key));}//第二组: 把所有的 values 取出Collection values = map.values();//这里可以使用所有的 Collections 使用的遍历方法//(1) 增强 forSystem.out.println("---取出所有的 value 增强 for----");for (Object value : values) {System.out.println(value);}//(2) 迭代器System.out.println("---取出所有的 value 迭代器----");Iterator iterator2 = values.iterator();while (iterator2.hasNext()) {Object value = iterator2.next();System.out.println(value);}//第三组: 通过 EntrySet 来获取 k-vSet entrySet = map.entrySet();// EntrySet<Map.Entry<K,V>>//(1) 增强 forSystem.out.println("----使用 EntrySet 的 for 增强(第 3 种)----");for (Object entry : entrySet) {//将 entry 转成 Map.EntryMap.Entry m = (Map.Entry) entry;System.out.println(m.getKey() + "-" + m.getValue());}//(2) 迭代器System.out.println("----使用 EntrySet 的 迭代器(第 4 种)----");Iterator iterator3 = entrySet.iterator();while (iterator3.hasNext()) {Object entry = iterator3.next();//System.out.println(next.getClass());//HashMap$Node -实现-> Map.Entry (getKey,getValue)//向下转型 Map.EntryMap.Entry m = (Map.Entry) entry;System.out.println(m.getKey() + "-" + m.getValue());}}
}
4.HashMap
4.1 HashMap的底层机制
5.HashTable
5.1 Properties
import java.util.Properties;@SuppressWarnings({"all"})
public class Properties_ {public static void main(String[] args) {Properties properties = new Properties();//增加//1. Properties 继承 Hashtable//2. 可以通过 k-v 存放数据,当然 key 和 value 不能为 null//properties.put(null, "abc");//抛出 空指针异常//properties.put("abc", null); //抛出 空指针异常properties.put("john", 100);//k-vproperties.put("lucy", 100);properties.put("lic", 100);//替换properties.put("lic", 88);//通过 k 获取对应值System.out.println(properties.get("lic"));//88//删除properties.remove("lic");//修改properties.put("john", "约翰");}
}
6.TreeMap
六、总结
七、Collections工具类
八、参考
B站 韩顺平零基础学Java