zoukankan      html  css  js  c++  java
  • Java-List

    1.List原理

    2.List常用的方法

    3.ArrayList和LinkedList比较

    4.创建List和遍历List

    5.list和array转换 

     
    1.List原理
    2.List常用的方法
    • 在末尾添加一个元素:void add(E e)
    • 在指定索引添加一个元素:void add(int index, E e)
    • 删除指定索引的元素:int remove(int index)
    • 删除某个元素:boolean remove(Object e)
    • 获取指定索引的元素:E get(int index)
    • 获取链表大小(包含元素的个数):int size()

    疑问:remove(1)是删除元素1还是index=1的元素呢

      

    public class testFunction {
       public static void main(String[] args){
           List<String> list = new ArrayList<String>();
           // 1.add(E e) 在末尾添加一个元素
           list.add("a");
           list.add("b");
           list.add("c");
           //2.add(int index, E e) 在指定索引添加一个元素
           list.add(0,  "0");
           //打印list [0, a, b, c]
           System.out.println(list);
           //3.获取链表长度 4
           System.out.println(list.size());
           //4.get(index)获取链表索引是2的值 b
           System.out.println(list.get(2));
           //5.remove(index)删除指定索引的值 list=[0, a, b, c] 返回b
           System.out.println(list);
           System.out.println(list.remove(2));
           System.out.println(list);
           //6.remove(E e)删除某个元素 list=[0, a,  c] 返回true
           System.out.println(list.remove("a"));
       }
        }
     3.ArrayList和LinkedList比较
    ArrayList和LinkedList的比较
      ArrayList LinkedList
    获取指定元素 慢,需要从头查找元素
    添加元素到末尾
    在指定位置添加/删除元素 慢,需要移动元素 快,不需要移动元素
    内存占用 较大
    4.创建List和遍历List
    创建List:

    方法1 add():

    public class testFunction {
       public static void main(String[] args){
           List<String> list = new ArrayList<String>();
           list.add("a");
           list.add("b");
           list.add(null);
           System.out.println(list);
    
           for(Iterator<String> it = list.iterator();it.hasNext();)
           {
               String s = it.next();
               System.out.println(s);
           }
       }
        }

    方法2:

    除了使用ArrayListLinkedList,我们还可以通过List接口提供的of()方法,根据给定元素快速创建List

    List<Integer> list = List.of(1, 2, 5);

    但是List.of()方法不接受null值,如果传入null,会抛出NullPointerException异常。

    备注:以上是Java9特性

    list的遍历:

    Iterator对象知道如何遍历一个List,并且不同的List类型,返回的Iterator对象实现也是不同的,但总是具有最高的访问效率。

    Iterator对象有两个方法:boolean hasNext()判断是否有下一个元素,E next()返回下一个元素。因此,使用Iterator遍历List代码如下: 

    public class Third{
            public static void  main(String[] args){
                List<Integer> list = new ArrayList<Integer>();
                list.add(1);
                list.add(2);
                list.add(3);
                for (Iterator<Integer> it = list.iterator();it.hasNext();){
                    Integer s = it.next();
                    System.out.println(s);
                }
            }
    }

    通过Iterator遍历List永远是最高效的方式。并且,由于Iterator遍历是如此常用,所以,Java的for each循环本身就可以帮我们使用Iterator遍历。把上面的代码再改写如下:

    public class Third{
            public static void  main(String[] args){
                List<Integer> list = new ArrayList<Integer>();
                list.add(1);
                list.add(2);
                list.add(3);
                for (Integer s:list){
                    System.out.println(s);
                }
            }
    }

    只要实现了Iterable接口的集合类都可以直接用for each循环来遍历,Java编译器本身并不知道如何遍历集合对象,但它会自动把for each循环变成Iterator的调用,原因就在于Iterable接口定义了一个Iterator<E> iterator()方法,强迫集合类必须返回一个Iterator实例。

    5.list和array转换

    list转换为array:

    public class Third{
            public static void  main(String[] args){
                List<Integer> list = new ArrayList<Integer>();
                list.add(1);
                list.add(2);
                list.add(3);
                Integer[] array = list.toArray(new Integer[list.size()]); //改进写法:Integer[] array = list.toArray(Integer[]::new);
                for (Integer n:array){
                    System.out.println(n);
                }
            }
    }

    array转换为list:

    Integer[] array = { 1, 2, 3 };
    List<Integer> list = List.of(array);

    对于JDK 11之前的版本,可以使用Arrays.asList(T...)方法把数组转换成List

    public class Third{
            public static void  main(String[] args){
                String[] s = {"aa","bb","cc"};
                List<String> strlist = Arrays.asList(s);
                for(String str:strlist){
                    System.out.println(str);
                }
            }
    }
  • 相关阅读:
    【报错】ES报错找不到Gson类
    【报错】Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    【JUC】AtomicInteger源码
    【Netty】Netty服务启动源码
    【Netty】Netty实现简单RPC
    【Netty】心跳机制
    【Netty】Netty模型
    【Netty】Reactor模型
    C# 好狂的多线程呀
    select使用
  • 原文地址:https://www.cnblogs.com/vanoraxnc/p/12194028.html
Copyright © 2011-2022 走看看