1.集合概述
Java中的集合是工具类,可以存储任意数量的具有共同属性的对象。
2.应用场景
- 无法预测存储数据的数量
- 同时存储具有一对一关系的数据
- 需要进行数据的增删
- 数据重复问题
3.集合框架的体系结构
1.Collection:存储类的对象
它分为3个子接口
- List:序列 存放有序的数据,允许重复 ,主要实现类:ArrayList
- Queue:队列 存放有序的数据,允许重复,主要实现类: LinkedList
- Set:集 存放无序的数据,不允许重复,主要实现类: HashSet
2.Map:存储键值对 无序的 主要实现类:HashMap
4.List
- List是元素有序并且可以重复的集合,成为序列
- List可以精确控制每个元素的插入位置,或删除某个位置的元素
- List的两个主要实现类数ArrayList 和LinkedList
1.ArrayList
- 底层是由数组实现的
- 长度动态增长,以满足应用程序的需求
- 在列表尾部插入或删除数据非常有效
- 更适合查找和更新元素
- ArrayList中的元素可以为null
package com.imooc.collection;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("张三");
list.add("李四");
System.out.println(list.size());
list.remove("张三");
System.out.println(list);
}
}
5.Set
- Set是元素无序并且不可重复的集合,被称为集
- HashSet是Set的一个重要实现类,称为哈希集
- HashSet中的元素无序并且不可重复
- HashSet中只允许一个null元素
- 具有良好的存取和查找性能
package com.imooc.collection;
public class Cat extends Object{
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.imooc.collection;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("blue");
set.add("red");
set.add("green");
set.add("black");
set.add("pink");
System.out.println(set);
System.out.println(set.size());
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("--------------------");
/*
Iterator(迭代器)接口遍历集合中的元素
hasNext()检测集合中是否还有下一个元素
next()返回集合中的下一个元素
*/
HashSet<Cat> set1 = new HashSet<Cat>();
Cat cat = new Cat("小明",18);
set1.add(cat);
for (Cat value : set1) {
System.out.println(value.getName());
}
//判断集合中是否包含指定元素
if(set1.contains(cat)){
System.out.println("包含");
}
//移除数据
set1.remove(cat);
//判断集合是否为空
if(set1.isEmpty()){
System.out.println("为空");
}else{
System.out.println("不为空");
}
}
}
6.Map
- Map中的数据是以键值对(key-value)形式存储的
- key-value以Entry类型的对象实例存在
- 可以通过key快速查找value
- 一个映射不能包含重复的键
HashMap
- 哈希表的Map接口的实现
- 允许使用null值和null键
- key值不允许重复
- HashMap中的Entry对象是无序排列的
package com.imooc.collection;
import java.util.*;
public class HashMapDemo {
public static void main(String[] args) {
Map<String,String> hashMap = new HashMap<String,String>();
hashMap.put("username", "张三");
hashMap.put("age", "18");
hashMap.put("sex", "男");
//打印输出value的值(使用迭代器)
Iterator<String> iterator = hashMap.values().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//打印输出key的值(使用迭代器)
Iterator<String> iterator1 = hashMap.keySet().iterator();
while (iterator1.hasNext()) {
System.out.println(iterator1.next());
}
System.out.println("------------------------");
//打印输出key和value的值
//通过entrySet方法
Set<Map.Entry<String,String>> entrySet = hashMap.entrySet();
for (Map.Entry<String,String> entry : entrySet) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
//查找key
Set<String> keySet = hashMap.keySet();
for (String key : keySet) {
if("age".equals(key)){
System.out.println("找到了key"+hashMap.get(key));
break;
}else{
System.out.println(key);
}
}
System.out.println("-----------------------");
//HashMap 的键集合(通过 keySet() 方法获取)放入 ArrayList 中
ArrayList<String> arrayList = new ArrayList<>(hashMap.keySet());
for (String key : arrayList) {
System.out.println(key);
}
}
}