集合的作用类似于数组但是,集合相对于数组来说,有着长度自动可变的有点。对于集合来说,其底层代码也是以数组的形式存储,只不过在集合中数组的长度会根据数据的多少自动变化。
ArrayList
格式:
ArrayList<Object> list = new ArrayList<Object>(); //或者 List<Object> list = new ArrayList<>(); //父类指向子类对象 //java.util包中 //在ArrayList<Object>()的括号中可以输入任意的数,但是没有意义。 //E Object
查询长度
list.size(); //返回集合的长度,数组中通过.lenght属性
增删改查
1.增
list.add(number); //可以添加任意类型(包括null),添加的数据可以重复 list.add(index,element); //index为插入的位置,element为插入的数据值 //需要注意的是index的取值范围是[0~list.size()] //结果是element放入index位置,该位置的数以及后续的数值向后移。 //(index=list.size(),是直接放在最后)。不允许跳跃着传入数据
2.删
list.remove(number); //删除number对象 //当number为int类型的数时,调用的是remove(int index); //当要删除整数时我们需要传入整数的封装类Intgeter,
//及remove(new Intgeter(number)); list.remove(int index); //该方法根据下标的位置删除对象。 //取值范围[0~list.size())
3.改
list.set(index,element); //index为修改的位置,element为修改的数据值 //取值范围[0~list.size())
4.查
list.indexOf(number); //在list中查询number找到返回下标,没找到返回-1; //如果上面添加了null,那么在这里也可以找到。 list.LastIndexOf(number); //在list倒叙中查询number找到返回下标,没找到返回-1; list.contains(number); //list中查询number找到true,没找到返回false;
判断为空
list.isEmpty(); //返回false不为空 list.size(); //!=0不为空
清空元素
list.clear(); //清空所有元素
ArrayList、Vector与Stack
-
API基本一样,底层都是数组的实现
-
Vector的方法都是线程安全的,这意味着慢/ArrayList没有考虑线程
-
相对于Vector,ArrayList在一些算法上做了优化
LinkedList与ArrayList
-
数据的结构不同
ArrayList底层是连续的数组 /查、改快;
LinkedList底层是双向链表 /删、增快;
-
LinkedList对于增加、删除的首尾有单独的操作方法
addFirst(); addLast(); removeFirst(); removeLast();
-
LinkedList与ArrayList类中的元素都可以通过.get(下标)的方式调用
List与Set接口
List接口 | Set接口 |
---|---|
1.有序 | 1.无序 |
2.有下标 | 2.无下标 |
3.可重复 | 3.不可重复 |
HashSet
格式:
HashSet set = new HashSet(); //对于HashSet来说add()不可以添加前已经出现的元素,
//如果添加的元素已经出现则不添加值返回false //通过调用HashCode()与equals()方法比较
HashSet的显示
-
增强for循环/foreach
for(Object obj : set){ //迭代 System.out.println(odj); }
-
Iterator接口(迭代器)
Iterator it = set.iterator(); while(it.hasNext){ //判断是否有下一个 Object odj = it.next(); //得到下一个 System.out.println(odj); }
Hash/哈希
优点:增删改查速度快,提高存储率
缺点:元素不可重复
TreeSet
特点:
-
有序列表
-
加入的对象必须实现Comparable(java.lang包中)接口中的ComepareTo方法
ComepareTo返回的数值可分为整数、负数、零(可以通过两个数相减)
元素排序
要求:对List接口下集合
1.Set->List
List<类> list = new ArrayList<>(set) //set指Set接口下的集合类的对象
2.Collections/工具类
1.Collections.shuffle(); //随机打乱顺序
!!!要与Collection相区别,Collection是集合框架的上层接口
-
Collections.sort(list); //自动排序,要求List中的类实现Comparable接口中的CompareTo方法
-
Collections.sort(list,(新对象|内部类)); //要求新对象或内部类实现Comparator接口中的compare方法
Comparable与Comparator
接口名 | 所在包 | 接口方法 | 方法参数 | 方法实现的类 |
---|---|---|---|---|
Comparable | java.lang | compareTo | 1 | 实现类实现 |
Comparator | java.util | compare | 2 | 另一个类或内部类 |