集合
概念
集合类存放的都是对象的引用,而不是对象本身。
集合是一个动态的数组,数组的长度是不可变的,集合的长度是可变的。
集合只能存储引用数据类型。
集合类型主要有三种:set(集),list(列表),和map(映射)
集合接口分为:Collection和Map,List,Set
Collection接口
collection中的元素是无序的可重复的
List集合
特点:元素有序,每一个元素都存在一个索引,元素可以重复。
ArrayList
ArrayList是顺序结构
特点:查询快,增删慢,线程不安全,效率高
ArrayList集合应用:添加,删除,for-each循环遍历
public class TestList {
public static void main(String[] args) {
Dog dog = new Dog("旺财", 18);
List<Dog> list = new ArrayList<>();
//添加元素
list.add(dog);
//往指定索引位置插入元素,不需要手动扩容位移插入了
list.add(0, dog2);
//删除指定索引位置的元素
list.remove(0);
//判断非空
if (list.size() != 0) {
//增强型for循环 for-each循环遍历
for (Dog d : list) {
System.out.println(d.getName() + d.getAge());
}
//判断某个元素是否存在于集合中
boolean contains = list.contains(dog1);
System.out.println(contains);
}
}
}
LinkedList
底层数据结构是链表
特点:查询慢,增删快,线程不安全,效率高
LinkedList应用:
public class TestlinkedList {
public static void main(String[] args) {
Dog dog = new Dog("旺财",18);
Dog dog1 = new Dog("锤锤",12);
LinkedList<Dog> list = new LinkedList<>();
list.add(dog);
list.add(1,dog1);
//取出栈顶元素
System.out.println(list.pop());
//删除栈顶元素
System.out.println(list.peek().name);
}
}
Map集合
特点:元素无序,元素通过键值对的方式进行存储,坚不可重复,值可以重复
HashMap
HashMap是可以序列化的,是线程不安全的。
HashMap的底层主要是基于数组,链表和红黑树实现的。
他是通过计算散列码来决定存储位置的。
HashMap中主要是通过可以的hashCode来计算hash值
TreeMap
TreeMap是基于红黑树实现的
TreeMap中不允许键对象是null。
HashMap与Set集合的应用:
public class TestMap {
public static void main(String[] args) {
//键值对 key-value
HashMap<String,String> hashMap = new HashMap<>();
hashMap.put("姓名","张三");
hashMap.put("性别","男");
hashMap.put("身高","180cm");
hashMap.put("体重","75公斤");
//hashmap是无序存放的,所以无法直接通过索引遍历,且key值不可重复,正好和Set集合特点一样
//所以就通过hashMap.keySet()把key方法一个Set集合里面
Set<String> set = hashMap.keySet();
//增强型for循环 for-each
//冒号左边是从集合中取出值的对应类型空间,冒号右边是你要遍历的集合
for (String key:set) {
System.out.println(hashMap.get(key));
}
//用迭代器对Set集合进行迭代,取出key放到迭代器里
Iterator<String> iterator = set.iterator();
//对迭代器进行循环,取出key对应的value值
//循环条件:iterator.hasNext() 判断迭代器中是否有下一个元素,有则执行循环,取出下一个元素打印。
while (iterator.hasNext()){
String key = iterator.next();
System.out.println(hashMap.get(key));
}
}
}
Set集合
特点:元素无序,元素是通过链表精选存储的,元素不可重复
HashSet
特点:线程不安全,效率高,允许存储null元素,元素无序且唯一
TreeSet
具有Set的属性和方法
TreeSet基于TreeMap实现的
底层结构是红黑树(平衡二叉树)。
Map集合与Collection集合的区别:
Map集合存储的元素是成对出现的(键值对)。
MAP集合的键是唯一的,值是可重复的。
Collection集合存储的元素是单独出现的。
Collection集合的儿子Set是唯一的,List是可重复的。
Map集合的数据结构只针对键有效,跟值无关。
Collection集合的数据结构是针对元素有效。
增强性for循环 for-each
冒号左边是从集合中取出值的对应类型空间,冒号右边是你要遍历的集合
Set<String> set = hashMap.keySet();
for (String key:set) {
System.out.println(hashMap.get(key));
}
迭代器Iterator
用迭代器对Set集合进行迭代,取出key放到迭代器里
Iterator<String> iterator = set.iterator();
对迭代器进行循环,取出key对应的value值
循环条件:iterator.hasNext() 判断迭代器中是否有下一个元素,有则执行循环,取出下一个元素打印。
while (iterator.hasNext()){
String key = iterator.next();
System.out.println(hashMap.get(key));
}