Java集合:接口List的使用( ArrayList, LinkedList)

Java集合:接口List的使用( ArrayList, LinkedList)

一.List集合的特点:

	1.它是一个元素的有序的集合
			例如:存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的
			
	2.它是一个带索引的的集合,通过索引就可以精确地操作集合中的元素(说白了和数组的索引一样)
	
	3.集合中可能有重复的元素,可以通过equals方法,来比较是否为重复的元素(在这里,我们也可以使用for
	循环来遍历所有的的元素比较所有的元素从而判断是否有重复的元素。其实还有很多的操作可以进行判断,
	迭代器大家也可以了解一下)
	
	4.List接口常用的子类:
	   ArrayList集合
  	   LinkedList集合

二List接口的特有方法:

1. List接口的特有方法:

a.增加元素的方法:

 add(Object e):向集合末尾处,添加指定的元素
 add(int index, Object e) 向集合指定索引处,添加指定的元素,原有元素依次后移

/*
   *  add(int index, E)
   *  将元素插入到列表的指定索引上
   *  带有索引的操作,防止越界问题
   *  java.lang.IndexOutOfBoundsException
   *     ArrayIndexOutOfBoundsException
   *     StringIndexOutOfBoundsException
   */
  public static void function(){
    List<String> list = new ArrayList<String>();
    list.add("abc1");
    list.add("abc2");
    list.add("abc3");
    list.add("abc4");
    System.out.println(list);
    
    list.add(1, "itcast");
    System.out.println(list);
  }

b.集合元素删除

 remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素
 remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

public static void function_1(){
      List<Double> list = new ArrayList<Double>();
      list.add(1.1);
      list.add(1.2);
      list.add(1.3);
      list.add(1.4);
   Double d = list.remove(0);
   System.out.println(d);
   System.out.println(list);

c.替换元素方法

 set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

public static void function_2(){
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        Integer i = list.set(0, 5);
    System.out.println(i);
    System.out.println(list);
  }

d.查询元素方法

 get(int index):获取指定索引处的元素,并返回该元素

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.set(2, "aaa");
		for(int i = 0
				;i<list.size();i++) {
			System.out.println(list.get(i));
		}
	}

注:以上是对List接口的大概解释,下面我们具体的讲解一下ArrayListLinkedList的区别。

二.ArrayList集合的自身特点

A:ArrayList集合的自身特点
  底层采用的是数组结构
  ArrayList al=new ArrayList();//创建了一个长度为0的Object类型数组
  al.add(“abc”);//底层会创建一个长度为10的Object数组 Object[] obj=new Object[10]
      //obj[0]=“abc”
      //如果添加的元素的超过10个,底层会开辟一个1.5*10的长度的新数组
      //把原数组中的元素拷贝到新数组,再把最后一个元素添加到新数组中
原数组:
  a b c d e f g h k l
添加m:
  a b c d e f g h k l m null null null null

注:ArrayList的使用用法和上面的List用法一致

三.LinkedList集合的自身特点:

A:LinkedList集合的自身特点
 &ensp;1.底层采用链表结构,每次查询都要从链头或链尾找起,查询相对数组较慢
  &ensp;2.但是删除直接修改元素记录的地址值即可,不要大量移动元素
 &ensp;3.LinkedList的索引决定是从链头开始找还是从链尾开始找

 4.如果该元素小于元素长度一半,从链头开始找起,如果大于元素长度的一半,则从链尾找起

B.LinkedList特有方法

LinkedList特有方法:获取,添加,删除;

 1.LinkedList 链表集合的特有功能
 2.自身特点: 链表底层实现,查询慢,增删快
 3.子类的特有功能,不能多态调用

 public class LinkedListDemo {
      public static void main(String[] args) {
        function_3();
      }
        /*
   *  E removeFirst() 移除并返回链表的开头
   *  E removeLast() 移除并返回链表的结尾
   */
  public static void function_3(){
    LinkedList<String> link = new LinkedList<String>();
    link.add("1");
    link.add("2");
    link.add("3");
    link.add("4");
    
    String first = link.removeFirst();
    String last = link.removeLast();
    System.out.println(first);
    System.out.println(last);
  
    System.out.println(link);
  }
  
  /*
   * E getFirst() 获取链表的开头
   * E getLast() 获取链表的结尾
   */
  public static void function_2(){
    LinkedList<String> link = new LinkedList<String>();
    link.add("1");
    link.add("2");
    link.add("3");
    link.add("4");
  
    if(!link.isEmpty()){
      String first = link.getFirst();
      String last = link.getLast();
      System.out.println(first);
      System.out.println(last);
    }
  }
  
  public static void function_1(){
    LinkedList<String> link = new LinkedList<String>();
    link.addLast("a");
    link.addLast("b");
    link.addLast("c");
    link.addLast("d");
    
    link.addFirst("1");
    link.addFirst("2");
    link.addFirst("3");
    System.out.println(link);
  }
  
  /*
   *  addFirst(E) 添加到链表的开头
   *  addLast(E) 添加到链表的结尾
   */
  public static void function(){
     LinkedList<String> link = new LinkedList<String>();
    
    link.addLast("heima");
    
    link.add("abc");
    link.add("bcd");
    
    link.addFirst("itcast");
    System.out.println(link);

四.数据的存储结构

上面我们讲到存储结构。那我就在这浅显的说一下
 a:栈结构:后进先出/先进后出(手枪弹夹) FILO (first in last out)
 b:队列结构:先进先出/后进后出(银行排队) FIFO(first in first out)
 c:数组结构:
           查询快:通过索引快速找到元素
           增删慢:每次增删都需要开辟新的数组,将老数组中的元素拷贝到新数组中
                  开辟新数组耗费资源
 d:链表结构
           查询慢:每次都需要从链头或者链尾找起
           增删快:只需要修改元素记录的下个元素的地址值即可不需要移动大量元素

注:以上是我在小组学长的总结上的得到的感悟,在学习这一部分的时候十分的害怕,不知道如何的学习,但当我们系统的看过之后就会发发现集合真的十分有意思。所以我们在学习心得知识的时候要学会接纳它,这样学习的过程将十分的享受。

上面的内容可能有些许的表达不清楚或语言组织错误,希望大家在发现之后积极留言指出

猜你喜欢

转载自blog.csdn.net/weixin_51261234/article/details/115748307