Collection[单列集合]接口
有List 和 Set子接口 和Map接口[双列集合]并列
**1.**List接口 实现类:ArrayList 和 LinkedList ;特点:有序,可重复,有对索引的增删改查相对操作的方法
a.ArrayList:底层为数组 查询快[根据地址和索引查找],增删慢
b.LinkedList:底层为链表 查询慢,增删快[直接修改地址指向]
**2.**Set接口 实现类:TreeSet 和 HashSet ;特点:无序,不可重复,没有特有方法,全部继承父类
a.TreeSet:底层为红黑树:会自动排序,需要指定排序顺序,有两种方式指定
(1)实现Comparable接口,重写compareTo方法
(2)创建比较器Collator,重写compare方法
b.HashSet:底层为哈希表【链表,数组,[链表满8为]红黑树】hashCode方法
默认比较地址值,可重写equals方法和hashCode方法比较属性,保持元素的唯一性
附图:
Map[双列集合]接口
实现类有TreeMap 和 HashMap
**1.**TreeMap:底层为红黑树会自动对键排序,需要指定排序顺序,有两种方式指定
(1)实现Comparable接口,重写compareTo方法
(2)创建比较器Comparator,重写compare方法
**2.**HashSet:底层为哈希表【链表,数组,[链表满8为]红黑树】hashCode方法
默认比较地址值,可重写键的equals方法和键的hashCode方法比较键的属性,保持元素的唯一性
注【HashSet,HashTree不能对其进行排序,只能打印出来的时候排序】
附图:
集合中的可变参数及初始化赋值
可变参数
//定义一个方法求n个数的和
public class Demo1 {public static void main(String[] args) {int sum = getSum(1, 2, 3, 4, 5);System.out.println(sum);}//参数使用可变参数,如果有并列参数,则需要放在最后private static int getSum(int number,int... arr) {int sum = 0;//number="10";//赋值无效,不能应用于测试类for (int t : arr) {sum += t;}return sum;}
}打印结果:
----------------------------------------------------------
14
初始化赋值
// 集合批量添加元素方法
public class Demo2 {public static void main(String[] args) {//List of 集合批量添加元素方法[固定集合,不可再往其中添加元素]//List集合List<String> list = List.of("a", "b", "c", "d", "e");//底存集合不可变//Set集合//传递的参数当中不能有重复,否则运行报错[参数非法添加异常]Set<String> set = Set.of("a", "b", "c", "d", "e");//Map集合//传递的参数键当中不能有重复,否则运行报错[参数非法添加异常]Map<String, String> map1 = Map.of("zhangsan", "江苏", "lisi", "上海");//of Entries提高阅读性,它会将键和值封装成键值对Map<String, String> map2 = Map.ofEntries(Map.entry("zhangsan","江苏"),Map.entry("lisi","上海"));//可结合集合的带参构造,实现集合的初始化,之后可继续添加元素ArrayList<String> list1 = new ArrayList<>(list);//接收的集合泛型范围要大于List.ofArrayList<Integer> list2 = new ArrayList<>(List.of(5,4,3,2,1));System.out.println(list1);System.out.println(list2);}
}
打印结果:
--------------------------------------------------------------------
[a, b, c, d, e]
[5, 4, 3, 2, 1]
注:【集合存储的都是引用数据类型】