数组和集合的区别:
数组:长度不可变
集合:长度可变
Conllection是集合框架的父接口
他的子接口有List和Set集合,均为接口
下图所表示的是Collection的集合框架的继承体系
今天主要分享List集合:List集合是有序的单列可重复的集合,其中两个常见的实现类是ArrayList和LinkedList
ArrayList:底层实现是用的数组,有下标;查询快,但是增删数据比较慢
LinkedList:底层实现是用的双向链表,没有下标;查询慢,但是增删数据比较快
List集合常用方法:
1. 添加数据:boolean add(E e)
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
System.out.println(list);//打印结果:[hello, java]
创建对象时集合是允许我们通过尖括号来规定存储数据的类型,但是只能是引用数据类型;这个就是泛型
2.返回集合的长度:int size()
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
System.out.println(list.size());//打印结果:2
因为我们只通过add方法添加了两个数据进去,所以长度为2
长度方法的比较:数组:length 字符串:length() 集合:size()
3.获取元素:E get(int index)
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
System.out.println(list.get(0));//打印结果:hello
上述方法是通过索引来获取指定的元素,索引是从0开始的
4.删除元素:E remove(int index)
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
System.out.println(list.remove(0));//打印结果:hello
System.out.println(list);//删除后打印结果:[java]
删除元素的方法一样是通过索引删除指定元素,并吧被删除的元素返回回来
4.插入元素:boolean add(int index,E e)
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
list.add("world");
System.out.println(list);//打印结果:[hello, java, world]
//向指定位置插入数据
list.add(1, "insert");
System.out.println(list);//打印结果:[hello, insert, java, world]
插入数据使用的是add的重载方法,在指定的索引处插入数据,指定索引处之后的数据会往后移动一个索引的位置
注意:插入时,给出的索引大小不要超过最大数据元素个数-1的大小哟,不然会报出下标越界异常
5.更改数据:E set(int index,E e)
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("java");
list.add("world");
//更改指定位置的数据
System.out.println(list.set(1, "set"));//打印结果:java
System.out.println(list);//打印结果:[hello, set, world]
上述是更改指定索引处的数据,更改后,会把被更改的数据返回回来
注意:使用时依然要注意下标不要越界哟
上述为List集合中的一些常见方法,对于ArrayList和LinkedList集合都适用
下面讲的为LinkedList集合中的一些方法
因为LinkedList集合底层是双向链表,所以就有一些方法可以获取到节点
1.获取头节点
E getFirst()
E element()
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(12);
list.add(24);
list.add(34);
System.out.println(list.getFirst());//打印结果为:12
System.out.println(list.element());//打印结果为:12
上述两种方法均可获取到头结点,其中element中就是返回的getFirst中所判断的,所以element相当于getFirst
注意:使用时,集合中一定要有元素哟,不然会报NoSuchElementException的异常哟
2.获取尾节点
E getLast()
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(12);
list.add(24);
list.add(34);
System.out.println(list.getLast());//打印结果为:34
通过getLast我们就可以获取到尾节点了,但是一样要注意集合中是有元素的,不然会报NoSuchElementException的异常哟
3.删除并获取头节点
E poll()
E remove()
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(12);
list.add(24);
list.add(34);
System.out.println(list.remove());//打印结果为:12
//调用poll方法进行删除
System.out.println(list.poll());//打印结果为:24
先调用remove方法删除头节点12;删除后,头节点就成了24;当我们使用poll再次删除时,就吧24给删除了
注意:对于remove来说,当集合中没有元素时,进行删除操作会报NoSuchElementException的异常;但是对于poll来说,当集合中没有元素时,不会报错,只会返回null
今天的分享就到这里了,如果有错误的地方欢迎大家来指点!