package test;
import java.util.*;
/**
* 三大集合区别List Set Map
*/
public class Test06 {
/**
* Collection是单列集合的根接口,主要用于存储一系列符合某种规则的元素,它有两个重要的子接口List和Set。
* List接口的特点是元素有序可重复
* Set接口的特点是元素无序,不可重复
* ArrayList和LinkedList是List接口的实现类
* HashSet和TreeSet是Set接口的实现类
*/
static void testCollection(){
System.out.println("Test Collection- - - -- - -- - -- - ");
String a ="A";
String b ="B";
//由于Collection是接口,所以无法实例化,而ArrayList类是Collection接口的间接实现类,所以可以通过ArrayList实例化:
Collection<String> list1 = new ArrayList<String>();
list1.add(a);
list1.add(b);
Collection<String> list2 = new ArrayList<String>();
list2.addAll(list1);
Iterator<String> it1 = list1.iterator();
while(it1.hasNext()) {
String str1 = it1.next();
System.out.println(str1);
}
System.out.println("-------");
Iterator<String> it2 = list2.iterator();
while(it2.hasNext()) {
String str = it2.next();
System.out.println(str);
}
System.out.println("-------");
System.out.println(list1==list2);
//Collection底层重写了equals()方法,使得eqals()比较两个list的值,而不是地址值
System.out.println(list1.equals(list2));
System.out.println("-------");
System.out.println(list1.contains(a));
}
/**
* List集合的特点就是存取有序,可以存储重复的元素,可以用下标进行元素的操作
*
* 2.ArrayList集合
* ArrayList支持可随需要而增长的动态数组。在Java数组中,长度是固定的,因此在数组被创建后,
* 不能修改长度,这意味着开发者需要实现知道数组的长度。
* 但在一般情况下,只有在运行时才知道数组长度。为了解决这个问题,ArrayList因此而生。
*
* 注意,list1开始为空,随着元素的加入,大小增加。当每个元素被删除时,大小会每次变小。
*
* 底层是使用数组实现,所以查询速度快,增删速度慢
*
* LinkedList:是基于链表结构实现的,所以查询速度慢,增删速度快,提供了特殊的方法,对头尾的元素操作(进行增删查)
*
* ArrayList与LinkedList
* ArrayList和LinkedList顾名思义,ArrayList是Array(动态数组)的数据结构,相当于动态数组;LinkedList是Link(链表)的双向数据结构,也可当作堆栈、队列、双端队列。
* 对于随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
* 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据(可以在上述ArrayList代码中体现)。
* 两者缺点都为线性不安全
*/
static void testList(){
System.out.println("测试 ArrayList");
List<Stu> list1 = new ArrayList<>();
list1.add(new Stu("lili",001));
list1.add(new Stu("haha",002)); //匿名对象存入集合
list1.add(new Stu("wawa",003));
Iterator<Stu> it=list1.iterator();
while(it.hasNext()) {
Stu stu = it.next();
System.out.println(stu.getName()+stu.getId());
}
System.out.println("测试 LinkedList");
List<Stu> list2 = new LinkedList<>();
list2.add(new Stu("first",004));
list2.add(new Stu("second",005));
list2.add(new Stu("third",006));
((LinkedList<Stu>) list2).addFirst(new Stu("forth",007));
while(!list2.isEmpty()){
Stu stu = ((LinkedList<Stu>) list2).pop();
System.out.println(stu.getName()+stu.getId());
}
System.out.println(list2.size());
}
static void testSet(){
Set<Stu> set = new HashSet<>();
Stu stu = new Stu("xioaming",2);
set.add(stu);
//加入相同的元素视为无效
set.add(stu);
set.add(new Stu("xiaogang",3));
Iterator<Stu> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().getName());
}
Object[] stus = set.toArray();
for(Object obj:stus){
System.out.println(((Stu)obj).getName());
System.out.println(((Stu)obj).getId());
}
}
/**
* HashTable出现在JDK1.0, 线程安全,因为不能存入null类型数据
* HashMap出现在JDK1.5,线程不安全,因为能存入null
*/
static void testMap(){
System.out.println("测试 HashMap");
HashMap<String, String> map = new HashMap<>();
//存储
System.out.println(map.put("ABC001", "Kevin"));
System.out.println(map.put("ABC002", "Lily"));
System.out.println(map.put("ABC001", "Clack")); //此处Key与第一个重复!!
System.out.println(map);
//获取Value
Collection<String> values=map.values();
for(String value: values) {
System.out.println(value);
}
//获取Key
//Set<K> keySet()
Set<String> keys = map.keySet();
for(String key: keys) {
String value = map.get(key);
System.out.println("ID:"+key+"--Name: "+value);
}
//获取所有中间人entrys
Set<Map.Entry<String, String>> entrys =map.entrySet();
//遍历所有entrys用Map.Entry<String, String>类型的entry接收
for(Map.Entry<String, String> entry:entrys) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println("ID:"+key+"--Name: "+value);
}
Iterator<Map.Entry<String,String>> entries = map.entrySet().iterator();
while (entries.hasNext()){
Map.Entry<String,String> entry = entries.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println("ID:"+key+"--Name: "+value);
}
System.out.println(map.size());
}
public static void main(String[] args) {
testCollection();
testList();
testSet();
testMap();
}
}
List、Set、Map比较
最新推荐文章于 2024-08-05 08:30:00 发布