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);
            }
        }
}
posted @ 2020-01-14 21:26  白莲花の  阅读(189)  评论(0编辑  收藏  举报