一、简介
集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中,构成集合的这些对象则称为该集合的元素。即:一个或多个确定元素所构成的整体。
二、作用
存储对象的容器,将容器添加标签,使其只能存储某种对象类型。
三、特点
- 只能用来存放对象;
- 存放的是对对象的引用;
- 可以存放不同类型,不限数量的数据类型;
四、集合和数组区别
长度区别:
- 数组固定
- 集合可变
内容区别:
- 数组可以是基本数据类型,也可是引用数据类型
- 集合是引用数据类型
元素内容:
- 数组只能存储同一种类型
- 集合可以存储不同类型
五、分类(依据实现的接口)
小结:
- Set:无序、不可重复集合;
- List:有序、可重复集合;
- Map:键值对映射,键唯一,值不唯一;
六、类型详解
set
1、简介
set元素保证元素唯一性依赖equal()和hashCode()两个方法,在创建的元素中没有重写这两个方法时,没人调用的是Object类中的这两个方法,而object() 方法默认比较的是地址值是否相等。
2、特点
特点:无序、不可重复集合;
3、分类
HashSet 、TreeSet 、 LeakedHashSet
4、类型
HashSet
(1)特点:
- 调用hashCode()查看有相同的哈希值,
- 调用equals()与放入新元素比较,去重(底层哈希算法实现,效率高)
(2)用法
- 创建集合对象(List是接口,通过创建子类对象完成接口的实例化),Set set=new HashSet()
- 创建元素对象
- 向集合中添加元素,add()
- 循环遍历集合并输出
(3)遍历
- 普通for循环
- 增强for循环
- 迭代器
public class Hast {
public static void main(String[] args) {
// Set set=new HashSet();//另一种调用集合方法
// set.add("as");
// set.add(12);
// System.out.println(set);
Set<Object> set1=new HashSet<Object>();//object为所有类的父类,就是说set里面可以添加任何类型元素
set1.add(12);
set1.add(21);
set1.add("ss");//添加元素
System.out.println(set1);
set1.remove(12);//移除元素,显示剩余元素
System.out.println(set1);
System.out.println(set1.contains(12));//判断集合是否包含该元素
set1.add(true);
int ss=set1.size();//显示集合中有多少元素
System.out.println(ss);
Iterator sl=set1.iterator();//使用迭代器遍历集合
while (sl.hasNext()) {
System.out.println(sl.next());
}
//for each迭代数据
for (Object obj : set1) {//把set的每一个数据取出来赋值给obj,直到循环结束
System.out.println(obj);
}
Set<String> set2=new HashSet<String>();//指定集合中只能放string数据类型
set2.add("s1");
set2.clear();//清空集合
set2.add("s2");
System.out.println(set2);
}
}
TreeSet
特点:元素自动升序排列(底层二叉树实现)
public class Tset {
public static void main(String[] args) {
Set<Object> ss=new TreeSet<Object>();
ss.add("a");
ss.add("c");
ss.add("a");
ss.add("s");
ss.add("o");
System.out.println(ss);//按照自然排序
Set<Integer> ss1=new TreeSet<Integer>();
ss1.add(2);
ss1.add(1);
ss1.add(4);
ss1.add(3);
for (Integer i:ss1) {
System.out.println(i);
}
}
}
List
1、特征
特征:有序、可重复的集合
2、分类
ArrayList、LinkedList、Vector
3、类型
ArrayList
(1)特点:底层动态数组,查询快,增删慢(同数组),线程不安全,效率高。
(2)用法
- 创建集合对象(List是接口,通过创建子类对象完成接口的实例化),List list=new ArrayList()
- 创建元素对象
- 向集合中添加元素,add()
- 循环遍历集合并输出;迭代器迭代时必须通过调用列表迭代器的方法来实现。
public class ALise {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();//指定插入集合类型为string
list.add("d");
list.add("e");//list允许元素重复
list.add("a");
list.add("d");
list.add("q");
list.add("k");
System.out.println(list);
System.out.println(list.get(2));//通过索引下标来访问指定位置元素
list.add(0,"e");//在指定索引下标位置插入数据
System.out.println(list);
System.out.println(list.indexOf("d"));//获取指定元素在集合中第一次出现的索引下标
System.out.println(list.lastIndexOf("d"));//获取指定元素在集合中最后一次出现的索引下标
list.set(1, "w");//根据指定的索引下标修改元素
List<String> seList=list.subList(1, 4);取索引下标在大于等于2小于4的元素
System.out.println(seList);
System.out.println(list.size());
}
}
LinkedList
特点:底层是链接,查询慢,增删快,线程不安全,效率高。
Vector
特点:查询快,增删慢,线程安全,效率低。
Map
1、作用:用于具有映射关系的数据
2、分类:HashMap、Hashtable、TreeMap
3、类型
HashMap
(1)特点:底层是哈希算发,针对键
(2)用法
- 创建集合对象,Map<Interger,Object> map=new HashMap<>();
- 创建元素对象
- 向集合中添加元素,put()
- 循环遍历集合并输出:1.获取所有元素的key:keySet();2.遍历keySet:iterator();3.通过key获取value:get()。
TreeMap
特点:底层是二叉树算法,针对键
public class Test6 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("b", 1);//添加数据
map.put("c", 2);
map.put("e", 2);
System.out.println(map);
System.out.println(map.get("b"));//根据key取值
map.remove("c");//根据key移除键值对
System.out.println(map);
//
System.out.println(map.size());//map集合的长度
System.out.println(map.containsKey("a"));//判断当前的map集合是否包含指定的key
System.out.println(map.containsValue(10));//判断当前的map集合是否包含指定的value
// map.clear();//清空集合
Set<String> keys = map.keySet();//获取map集合的key的集合
map.values();//获取集合的所有value值
//遍历map集合,通过map.keySet();
for(String key : keys){
System.out.println("key: " + key + ", value: " + map.get(key));
}
//通过map.entrySet();遍历map集合
Set<Entry<String, Integer>> entrys = map.entrySet();
for(Entry<String, Integer> en : entrys){ System.out.println("key: " + en.getKey() + ", value: " + en.getValue());
}
//TreeMap的自然排序是字典排序
Map<Integer,String> map1 = new TreeMap<Integer, String>();
map1.put(4, "a");
map1.put(2, "a");
map1.put(3, "a");
map1.put(1, "a");
System.out.println(map1);
Map<String,String> map2 = new TreeMap<String, String>();
map2.put("b", "b");
map2.put("c", "c");
map2.put("d", "d");
map2.put("a", "a");
map2.put("ab", "ab");
map2.put("1", "ab");
map2.put("10", "ab");
System.out.println(map2);
}
}
七、工具类
1、作用
操作Set、List、Map,对其进行排序、查询、修改等操作;还提供了对集合对象设置不可变、对集合对象实现同步控制等方法;
2、常用成员方法
函数 | 作用 |
---|---|
reverse(List) | 反转集合中元素的顺序 |
shuffle(List) | 对集合元素进行随机排序 |
sort(List) | 升序排列 |
sort(List,Comparator) | 根据指定的Comparator产生的顺序对集合进行排序 |
swap(List, int , int) | 指定集合的i处元素与j处元素进行交换 |
Object max(Collection) | 根据元素的自然顺序,返回给定集合中的最大元素 |
Object max(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最大元素 |
Object min(Collection) | 返回给定集合中的最小元素 |
Object min(Collection,Comparator) | 根据 Comparator 指定的顺序,返回给定集合中的最小元素 |
int frequency(Collection,Object) | 返回指定集合中指定元素的出现次数 |
boolean replaceAll(List list,Object oldVal,Object newVal) | 使用新值替换 List 对象的所有旧值 |
public class Test7 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("b");
list.add("cd");
list.add("ca");
list.add("a");
list.add("a");
list.add("1");
System.out.println(list);
Collections.reverse(list);//反转 List 中元素的顺序
System.out.println(list);
Collections.shuffle(list);//对 List 集合元素进行随机排序
System.out.println(list);
//
Collections.sort(list);//list集合字典升序排序
System.out.println(list);
System.out.println(Collections.frequency(list, "x"));//返回指定集合中指定元素的出现次数
Collections.replaceAll(list, "b", "bb");//使用新值替换 List 对象的所有旧值
System.out.println(list);
Collections.swap(list, 0, 4);//将指定 list 集合中的 i 处元素和 j 处元素进行交换
System.out.println(list);
System.out.println(Collections.max(list));//list中最大值
System.out.println(Collections.min(list));//list中最小值
}
}