12.集合List

  • • 发表于 3年前
  • • 作者 大妖怪
  • • 3048 人浏览
  • • 7 条评论
  • • 最后编辑时间 1年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

上一章讲的数组,数组有一个特点,就是只能放相同类型值进去,那么如果我们既有字符串又有数字甚至还有对象怎么办?java似乎早就想好了给我们提供了集合(Collection).我们今天要讲的是Collection的子接口——List.
List又有三个实现类:

  • ArrayList
  • LinkedList
  • Vector

这三个都是list,至于什么是子类,我们会在对象那章去普及。他们三个相同点有:

  • 都是list的实现类
  • 都是有序的,也就是可以像数组那样通过下标查找元素
  • 都没有长度限制,开辟的内存空间动态改变大小
  • 都允许出现重复元素

不同点有:

  • ArrayList底层是数组结构,在查找,修改方面的速度还有性能比较好
  • LinkedList底层链式底层结构,在添加,删除方面的速度还有性能比较好
  • Vector与ArrayList相似但是Vector是线程不安全的而ArrayList的线程安全,这点我们会在线程那章详细讲到。

我们一般最常用的还是ArrayList。
用法我们就拿ArrayList来举例说明。

  • 查询方法
    • 根据下标查询:get(下标)
      ArrayList list = new ArrayList();
      list.add("1");
      System.out.println(list.get(0));
      
      list的下标和数组一样,也是从0开始,代表了元素在列表里的位置
  • 循环获取值
    • 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());  
      }
      
  • 修改方法
    • 根据下标修改:set(下标)
      ArrayList list = new ArrayList();
      list.add("大妖怪");
      System.out.println(list.get(0));
      list.set(0, "小妖怪");
      System.out.println(list.get(0));
      
  • 增加方法
    • 追加到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));
      }
      
  • 删除方法:“
    • 删除指定元素: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));
      }
      
  • 其它方法:
    • 获得列表长度(元素的个数,从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+/)即可调出来看看:
分享到:
评论区(共7条评论)
7条评论
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回复:192 积分:7245

已加入社区[1115]天

梦里巷口,可有你倚门回首

作者详情》
Top