容器-LinkedList容器类(六)

容器-LinkedList容器类(六)

  1. LinkedList底层用双向链表。特点:(只要是链表,不管是单向链表、双链表、双向循环链表)都是查询效率低,增删效率高,线程不安全。因为链表是没有索引的,只有节点,比如单向链表是头节点存着下一个节点的地址,一删掉,不用去移动元素,所以增删效率高。

  2. 数组的特点:查询效率高,增删效率低,因为数组有索引,你只要根据索引一查就能查到,而你要删除一个元素则后面所有的元素都要往前移,所以增删效率低。

  3. LinkedList的使用LinkedList实现了list接口,所以LinkedList是具备List的存储特征的(有序,元素可重复)。

    • 所以LinkedList的方法是和ArrayList的方法差不的,都是实现了List接口,更多的方法可以通过ArrayList的方法,那里的方法更详细。

      public class LinkedListTest {
          public static void main(String[] args) {
              List<String> list= new LinkedList<>();
              //添加元素
              list.add("a");
              list.add("b");
              list.add("c");
              list.add("a");
              //获取元素
              for (int i=0;i<list.size();i++){
                  System.out.println(list.get(i));
              }
              System.out.println("----------------------");
              for (String str:list){
                  System.out.println(str);
              }
          }
      }
      
      
  4. ListedList的使用

    • ListedList底层是双向链表的,所以他是非List的标准,有些方法就和List方法不一样

容器-LinkedList容器类(六)_第1张图片

  1. ListedList的使用的具体实现

    import java.util.LinkedList;
    import java.util.List;
    
    public class LinkedListTest {
        public static void main(String[] args) {
            List<String> list= new LinkedList<>();
            //添加元素
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("a");
            //获取元素
            for (int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
            System.out.println("----------------------");
            for (String str:list){
                System.out.println(str);
            }
    
    
            System.out.println("------------LinkedList----------");
            /*LinkedList linkedList=new LinkedList<>();
            //返回列表的第一个元素(每次的元素,都加在向第一个元素的前面),就是c+b+a
            linkedList.addFirst("a");
            linkedList.addFirst("b");
            linkedList.addFirst("c");
            for (String str:linkedList){
                System.out.println(str);//打印出来的顺序就是:c b a
            }*/
    
            System.out.println("----------------------");
            LinkedList<String> linkedList=new LinkedList<>();
            //每次加的元素,都在最后一个元素的基础上在添加一个元素
            linkedList.addLast("a");
            linkedList.addLast("b");
            linkedList.addLast("c");
            for (String str:linkedList){
                System.out.println(str);//打印的顺序是 a b c
            }
    
            System.out.println("----------");
            System.out.println(linkedList.getFirst());//获得第一个元素
            System.out.println(linkedList.getLast());//获得最后一个元素
    
            System.out.println("--------------------");
            linkedList.removeFirst();//删除第一元素
            linkedList.removeLast();//删除最后一个元素
            for (String str:linkedList){
                System.out.println(str);//只剩下中间元素b
            }
            System.out.println("---------------------------");
            linkedList.addLast("c");//本来就只剩下 b ,你在b的后面加一个c,现在的顺序就是b c
            linkedList.pop();//删除栈顶元素,每次你打印出来的链表,你竖起来看,当成栈来看,就不会出错了
            for (String str:linkedList){
                System.out.println(str);//删除栈顶元素之后就只剩下 c
            }
    
    
            System.out.println("---------------------------");
            //向链表的头添加元素,也就是栈顶的头添加元素
            linkedList.push("h");
            for (String str:linkedList){
                System.out.println(str);// 链表本身就只剩下c ,现在先他的头添加一个元素,打印出来的头就是 h c
            }
    
            //判断链表是否为空
            System.out.println(linkedList.isEmpty());
        }
    }
    
    

你可能感兴趣的:(java)