目录
8.2.1.List接口有对父接口Collection进行功能(方法)上的扩充
8.4.4.ArrayList常用方法(ArrayList与父接口List中的方法基本一致,并没有进行功能上的扩充)
8.5.3.LinkedList特有的方法_进行首尾操作(LinkedList对父接口List进行功能上扩充)
8.List集合
8.1.List集合有哪些特点
1.在掌握Collection接口使用后,再来看看Collection接口中子类,下面将学习Collection中的常用两个子类(java.util.List集合、java.util.Set集合)。
2.List特点:
1.有序的集合,存储元素和取出元素的顺序是一致的
2.有索引,包含了一些带索引的方法
3.允许存储重复的元素
3.之前已经学习过List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义的。
8.2.List接口中常用方法有哪些
8.2.1.List接口有对父接口Collection进行功能(方法)上的扩充
8.2.2.List接口中特有的方法(带索引)
1.List接口中特有的方法(带索引)
* -public void add(int index,E element):将指定的元素,添加到该集合指定位置上
* -public E get(int index):返回该集合中指定位置的元素
* -public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素
* -public E set(int index,E element):用指定元素替换集合中元素,并返回更新前元素
8.3.List集合三种遍历方式
list集合有序
1.for循环
2.迭代器
3.增强for
/**
* list集合遍历有三种
*/
//1.使用普通for循环
for (int i=0;i<list.size();i++){
String s = list.get(i);
System.out.println(s);
}
//2.使用迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//3.增强for循环
for (String s : list) {
System.out.println(s);
}
8.4.List集合实现类_ArrayList
8.4.1.ArrayList数据存储结构是什么
8.4.2.ArrayList特点
8.4.3.ArrayList为什么增删比较慢
8.4.4.ArrayList常用方法(ArrayList与父接口List中的方法基本一致,并没有进行功能上的扩充)
1.java.utill.ArrayList集合数据存储的结构是数组结构。
2.ArrayList特点:因为底层是数组,所以特点和数组一样:查询快,增删慢。
3.由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList集合是最常用集合。但许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。若需求是查询比较多,可以用ArrayList集合,如果增删操作比较多,效率就比较低。
4.ArrayList集合底层就是一个数组,底层源码是数组的复制,每增加一次前都会创建一个新数组,长度为原数组长度+1,把原数组复制过来。因此ArrayList集合查询快,因为地址是连续的,增删慢是因为每添加一个元素,底层都要调用一个数组复制的方法,效率比较低。
5.ArrayList中的方法与List接口中的方法基本一致,并没有进行功能上的扩充。6.ArrayList常用方法:
1.public boolean add(E e):向集合中添加元素,参数的类型和泛型一致,返回布尔类型。
2.public E get(int index):从集合中获取元素,参数是索引编号,返回值就是对应位置元素。
3.public E remove(int index):从集合中删除元素,参数是索引编号,返回值是被删除的元素。
4.public int size():获取集合的尺寸长度,返回值是集合中元素个数。
2.备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可以不写,但是对于其它集合来说,add添加动作不一定成功public class ArrayList3 { public static void main(String[] args) { ArrayList<String>list=new ArrayList<>(); //1.向集合中添加数据:add //备注:只有ArrayList集合的add方法可以不用返回值,其它集合要。 boolean bol=list.add("zhangsan"); list.add("lisi"); list.add("wangwu"); list.add("maliu"); System.out.println(list); System.out.println("添加的动作是否成功:"+bol); //2.从集合中获取元素:get,索引从0开始 String name=list.get(0); System.out.println("list集合中0号索引位置是"+name); //3.从集合中删除元素:remove,索引从0开始 String whoRemoved=list.remove(0); System.out.println("被删除的人是:"+whoRemoved); System.out.println(list); //4.获取集合的长度,即元素的个数 int size=list.size(); System.out.println("集合的长度是:"+size); } }
8.5.List集合实现类_LinkedList
8.5.1.LinkedList数据存储结构是什么
8.5.2.LinkedList特点
8.5.3.LinkedList特有的方法_进行首尾操作(LinkedList对父接口List进行功能上扩充)
1.java.util.LinkedList集合的数据存储结构是链表,方便元素的添加、删除的集合。
2.LinkedList是一个双向链表。
3.实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供大量首尾操作的方法
4.LinkedList集合特点:
1.底层是一个链表结构:查询慢,增删块
2.里面包含大量操作首尾元素的方法
注意:使用LinkedList集合特有的方法(即非List接口中定义的方法),不能使用多态(创建集合对象)因为多态的弊端是看不到子类特有的方法。
5.LinkedList集合特点与ArrayList集合相反,前者增删快,查询慢;后者增删慢,查询快
6.LinkedList集合特有的方法:--插入首尾--
* public void addFirst(E e):将指定元素插入此列表开头.等价于push方法
* public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法
* public void push(E e):将元素推入此列表所表示的堆栈(压栈)。
*--获取首尾--
* public E getFirst():返回此列表的第一个元素
* public E getLast():返回此列表的最后一个元素
*--移除首尾--
* public E removeFirst():移除并返回此列表第一个元素。等效于pop()方法
* public E removeLast():移除并返回此列表的最后一个元素
* public E pop():从此列表所表示的堆栈处弹出一个元素(弹栈)
*--判空--
* public boolean isEmpty():若列表不含元素则返回truepublic class Demo3_LinkedList { public static void main(String[] args) { show01(); show02(); } /** *public void addFirst(E e):将指定元素插入此列表开头.等价于push方法 *public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法 *public void push(E e):将元素推入此列表所表示的堆栈。。 */ private static void show01(){ //创建LinkedList集合对象 LinkedList<String> linked = new LinkedList<>(); //使用add方法往集合中添加元素 linked.add("a"); linked.add("b"); linked.add("c"); System.out.println(linked);//[a,b,c] //public void addFirst(E e):将指定元素插入此列表开头,等价于push() linked.addFirst("A"); linked.push("B"); System.out.println(linked);//[B, A, a, b, c] //public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法 linked.addLast("d"); System.out.println(linked);// } /** * public E getFirst():返回此列表的第一个元素 * public E getLast():返回此列表的最后一个元素 */ private static void show02(){ //创建LinkedList集合对象,不能使用多态 LinkedList<String > linked = new LinkedList<>(); //使用add方法往集合中添加元素 linked.add("1"); linked.add("2"); linked.add("3"); System.out.println(linked); if (!linked.isEmpty()){ //为避免集合为空的异常NoSuchElementException,要先判空 String first = linked.getFirst(); System.out.println("linked集合第一个元素为:"+first);//1 String last = linked.getLast(); System.out.println("linked集合最后一个元素为:"+last);//3 } } /** * public E removeFirst():移除并返回此列表第一个元素。等效于pop()方法 * public E removeLast():移除并返回此列表的最后一个元素 * public E pop():从此列表所表示的堆栈处弹出一个元素 */ private static void show03(){ //创建LinkedList集合对象 LinkedList<String> linked = new LinkedList<>(); //使用add方法向集合添加元素 linked.add("i"); linked.add("ii"); linked.add("iii"); System.out.println(linked); String pop = linked.pop(); System.out.println("移除第一个元素:"+pop); String last = linked.removeLast(); System.out.println("移除最后一个元素:"+last); } }
8.6.Vector集合
1.Vector集合是所有单列集合的祖先。
2.Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是Vector的大小可以根据需要增大减小,以适应创建 Vector后进行添加或移除项的操作。
3.Vector和ArrayList异同之处:
1.Vector和ArrayList集合底层数据结构都是数组。
2.Vector与Collection实现不同,Vector是同步的,即是单线程,所以速度慢,所以从java2平台 v1.2版本开始被ArrayList集合取代。v1.2版本后Vector也实现类List接口。现在都v1.9版本了。
- 都实现List接口,ArrayList怎么存怎么取数据,Vector也是。都是通过size获取有效长度。
- 底层都是数组结构。
- Arraylist内部原理是默认情况下创建一个长度10的数组,Vector也是,但ArrayList每次扩容1.5倍,Vector可指定扩容长度。
- Vector与Collection实现不同,Vector是同步的,即是单线程,所以速度慢
- vector扩容算法和arraylist基本一样,只是在计算新长度时做了判断,若增量<0,则新长度为两倍旧长度,若增量>0则新长度为(旧长度+增量)