上一章讲的数组,数组有一个特点,就是只能放相同类型值进去,那么如果我们既有字符串又有数字甚至还有对象怎么办?java似乎早就想好了给我们提供了集合(Collection).我们今天要讲的是Collection的子类——List.
List又有三个实现类:
List又有三个实现类:
- ArrayList
- LinkedList
- Vector
这三个都是list,至于什么是子类,我们会在对象那章去普及。他们三个相同点有:
- 都是list的实现类
- 都是有序的,也就是可以像数组那样通过下标查找元素
- 都没有长度限制,开辟的内存空间动态改变大小
- 都允许出现重复元素
不同点有:
- ArrayList底层是数组结构,在查找,修改方面的速度还有性能比较好
- LinkedList底层链式底层结构,在添加,删除方面的速度还有性能比较好
- Vector与ArrayList相似但是Vector是线程安全的而ArrayList的线程不安全,这点我们会在线程那章详细讲到。
我们一般最常用的还是ArrayList。
用法我们就拿ArrayList来举例说明。
用法我们就拿ArrayList来举例说明。
-
查询方法
-
根据下标查询:get(下标)
- ArrayList list = new ArrayList();
- list.add("1");
- System.out.println(list.get(0));
- list的下标和数组一样,也是从0开始,代表了元素在列表里的位置
-
根据下标查询:get(下标)
-
循环获取值
-
for循环:
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- list.add("小妖怪");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
for each循环:
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- list.add("小妖怪");
- for (Object object : list) {
- System.out.println(object);
- }
-
iterator迭代器遍历:(这种方法无需关注底层是数组还是链式)
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- list.add("小妖怪");
- Iterator it = list.iterator();
- while(it.hasNext()){
- System.out.println(it.next());
- }
-
for循环:
-
修改方法
-
根据下标修改:set(下标)
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- System.out.println(list.get(0));
- list.set(0, "小妖怪");
- System.out.println(list.get(0));
-
根据下标修改:set(下标)
-
增加方法
-
追加到list的最后:add(内容)
- ArrayList list = new ArrayList();
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list.add("大妖怪");
- System.out.println("==============");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
添加到任意位置(原来位置上的元素后移):add(下标,内容)
- ArrayList list = new ArrayList();
- list.add(1);
- list.add(2);
- list.add(3);
- list.add(4);
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list.add(2, "大妖怪");
- System.out.println("==========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
将另一个列表添加进来:addAll(列表)
- ArrayList list = new ArrayList();
- ArrayList list1 = new ArrayList();
- list.add("1");
- list.add("2");
- list.add("3");
- list.add("4");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list1.add("a");
- list1.add("b");
- list1.add("c");
- list1.add("d");
- list.addAll(list1);
- System.out.println("===========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
将另一个列表添加到指定位置: addAll(下标,列表)
- ArrayList list = new ArrayList();
- ArrayList list1 = new ArrayList();
- list.add("1");
- list.add("2");
- list.add("3");
- list.add("4");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list1.add("a");
- list1.add("b");
- list1.add("c");
- list1.add("d");
- list.addAll(2,list1);
- System.out.println("===========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
追加到list的最后:add(内容)
-
删除方法:“
-
删除指定元素:remove(内容),此方法对内容是int类型的无效
- ArrayList list = new ArrayList();
- list.add("1");
- list.add("2");
- list.add("3");
- list.add("4");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list.remove("2");
- System.out.println("===========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
根据下标删除元素:remove(下标)
- ArrayList list = new ArrayList();
- list.add("1");
- list.add("2");
- list.add("3");
- list.add("4");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list.remove(3);
- System.out.println("===========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
从这个列表中删除另一个列表所包含的内容:removeAll(列表)
- ArrayList list = new ArrayList();
- ArrayList list1 = new ArrayList();
- list.add("1");
- list.add("2");
- list.add("3");
- list.add("4");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- list1.add("1");
- list1.add("2");
- list.removeAll(list1);
- System.out.println("===========");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
删除指定元素:remove(内容),此方法对内容是int类型的无效
-
其它方法:
-
获得列表长度(元素的个数,从1开始):size()
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- list.add("小妖怪");
- System.out.println(list.size());
-
判断是否为空:isEmpty()
- ArrayList list = new ArrayList();
- list.add("大妖怪");
- list.add("小妖怪");
- System.out.println(list.isEmpty());
- ArrayList list1 = new ArrayList();
- System.out.println(list1.isEmpty());
以上代码为list常用的方法,复制过去的报错地方记得导包。还有很多经方法在这就不列出来了,可以将光标list后面用代码提示(Alt+/)即可调出来看看:
-
获得列表长度(元素的个数,从1开始):size()