只讲干货!!没有语言行不行只有人行不行,不努力一把是打算java炒饭嘛?今天拿下:List类容器!!

容器

容器简介

        容器,是用来容纳物体、管理物体。生活中, 我们会用到各种各样的 容器。如锅碗瓢盆、箱子和包等。
        程序中的“ 容器 也有类似的功能,用来容纳和管理数据。
        基于数组并不能满足我们对于“ 管理和组织数据的需求 ,所以我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象。 这就是我们今天要学习的容器,也叫集合(Collection)

容器的结构

单例集合

        Collection接口介绍
        Collection 表示一组对象,它是集中、收集的意思。 Collection 接口的两个子接口是List Set 接口。

         Collection接口中定义的方法

双例集合


List接口特点

        List是有序、可重复的容器。
        有序:有序 ( 元素存入集合的顺序和取出的顺序一致 ) List 中每个元素都有索引标记。可以根据元素的索引标记(在List 中的位置)访问元素,从而精确控制这些元素。
        可重复:List 允许加入重复的元素。更确切地讲, List 通常允许满足e1.equals(e2) 的元素重复加入容器。

ArrayList容器的基本使用

        ArrayList是 List 接口的实现类。是 List 存储特征的具体实现。
        ArrayList底层是用数组实现的存储。 特点:查询效率高,增删效率低,线程不安全。

public class ArrayListTest {
    public static void main(String[] args) {
       //实例化ArrayList容器
        List<String> list  = new ArrayList<>();

        //添加元素
        boolean flag1 = list.add("秃头");
        boolean flag2 = list.add("小子");
        boolean flag3 = list.add("TuT");
        boolean flag4 = list.add("XiZ");
      
System.out.println(flag1+"\t"+flag2+"\t"+flag3+"\t"+flag4);
        

        
        //删除元素
        boolean flag4 =list.remove("秃头");
        System.out.println(flag4);

        //获取容器中元素的个数
        int size = list.size();
        System.out.println(size);

        //判断容器是否为空
        boolean empty = list.isEmpty();
        System.out.println(empty);

        //容器中是否包含指定的元素
        boolean value =list.contains("TuT");
        System.out.println(value);
        
        
        //清空容器
        list.clear();
        Object[] objects1 = list.toArray();
      
System.out.println(Arrays.toString(objects1));
   }
 }

ArrayList容器的索引操作

public class ArrayListTest2 {
   public static void main(String[] args) {
        //实例化容器
        List<String> list = new ArrayList<>();
       //添加元素
        list.add("tut");
        list.add("秃头");

        //向指定位置添加元素
        list.add(0,"小子");

        System.out.println("获取元素");
        String value1 = list.get(0);
        System.out.println(value1);

        System.out.println("获取所有元素方式一");
        //使用普通for循环
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
       }

        System.out.println("获取所有元素方式二");
        //使用Foreach循环
        for(String str:list){
            System.out.println(str);
       }



        System.out.println("元素替换");
        list.set(1,"sun");
        for(String str:list){
            System.out.println(str);
       }


        System.out.println("根据索引位置删除元素);
       String value2 = list.remove(1);
       System.out.println(value2);
        System.out.println("----------------");
        for(String str:list){
            System.out.println(str);
       }

        System.out.println("查找元素第一次出现的位置");
        int value3 = list.indexOf("小子");
        System.out.println(value3);

        System.out.println("查找元素最后一次出现的位置");
        list.add("小子");
        for(String str:list){
            System.out.println(str);
       }
        int value4 =list.lastIndexOf("小子");
        System.out.println(value4);
        
   }
}

ArrayList的并集、交集、差集

并集
       
       //并集操作:将另一个容器中的元素添加到当前容器中
       List<String> a  = new ArrayList<>();


        a.add("a");
        a.add("b");
        a.add("c");

        List<String> b = new ArrayList<>();
        b.add("a");
        b.add("b");
        b.add("c");

        //a并集b
        a.addAll(b);
        for(String str :a){
            System.out.println(str);
       }
交集
        //交集操作:保留相同的,删除不同的
        List<String> a1  = new ArrayList<>();
       a1.add("a");
        a1.add("b");
        a1.add("c");

        List<String> b1 = new ArrayList<>();
        b1.add("a");
        b1.add("d");
        b1.add("e");
        //交集操作
        a1.retainAll(b1);
        for(String str :a1){40
            System.out.println(str);
       }
差集
        //差集操作:保留不同的,删除相同的
        List<String> a2  = new ArrayList<>();
        a2.add("a");
        a2.add("b");
        a2.add("c");

        List<String> b2= new ArrayList<>();
        b2.add("b");
        b2.add("c");
        b2.add("d");
        a2.removeAll(b2);
        for(String str :a2){
            System.out.println(str);
       }

        ArrayList底层是用数组实现的存储。

Vector容器的基本使用

        Vector底层是用数组实现的,相关的方法都加了同步检查,因此 线程安全, 效率低 。 比如, indexOf 方法就增加了 synchronized 同步标记。

Vector 的使用
        Vector的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对List 接口中的抽象方法做了具体实现。

 public class VectorTest {
   public static void main(String[] args) {

        //实例化Vector
        List<String> v = new Vector<>();
        v.add("a");
        v.add("b");
        v.add("a");

        for(int i=0;i<v.size();i++){
           System.out.println(v.get(i));
      }
        System.out.println("----------------------");
        for(String str:v){
            System.out.println(str);
       }
   }
 }

LinkedList容器的基本使用

        LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。
        双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。

每个节点都应该有 3 部分内容:
                        class   Node < E > {
                                Node < E >   previous ;   // 前一个节点
                                E   element ;           // 本节点保存的数据
                                Node < E > next ; // 后一个节点
                        }
List 实现类的选用规则
        如何选用ArrayList LinkedList Vector?
        1 需要线程安全时,用 Vector
2         不存在线程安全问题时,并且查找较多用 ArrayList (一般使用它)
3         不存在线程安全问题时,增加或删除元素较多用 LinkedList

LinkedList容器的使用(List标准)

        LinkedList实现了 List 接口,所以 LinkedList 是具备 List 的存储特征的(有序,元素有重复 )
public class LinkedListTest {
   public static void main(String[] args) {
       //实例化LinkedList容器
       List<String> list = new LinkedList<>();
       //添加元素
       boolean a = list.add("a");
       boolean b = list.add("b");
       boolean c = list.add("c");
       list.add(3,"a");
       System.out.println(a+"\t"+b+"\t"+c);

LinkedList容器的使用(非List标准)

方法说明:
  • void addFirst(E e)           将指定元素插入到开头
  • void addLast(E e)           将指定元素插入到结尾
  • getFirst()                         返回此链表的第一个元素
  • getLast()                         返回此链表的最后一个元素
  • removeFirst()                  移除此链表中的第一个元素,并返回这个元素
  • removeLast()                  移除此链表中的最后一个元素,并返回这个元素
  • E pop()                           从此链表所表示的堆栈处弹出一个元素,等效于removeFirst
  • void push(E e)                将元素推入此链表所表示的堆栈 这个等效于addFisrt(E e)
     
public class LinkedListTest2 {
   public static void main(String[] args) {
       System.out.println("-------LinkedList-------------");
       //将指定元素插入到链表开头
       LinkedList<String> linkedList1 = newLinkedList<>();
       linkedList1.addFirst("a");


        linkedList1.addFirst("b");
        linkedList1.addFirst("c");
      for (String str:linkedList1){
            System.out.println(str);
      }
        System.out.println("----------------------");
        //将指定元素插入到链表结尾
        LinkedList<String> linkedList = newLinkedList<>();
        linkedList.addLast("a");
        linkedList.addLast("b");
        linkedList.addLast("c");
        for (String str:linkedList){
            System.out.println(str);
       }

        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);
       }
        System.out.println("-----------------------");
        linkedList.addLast("c");
        //从此链表所表示的堆栈处弹出一个元素,等效于removeFirst
        linkedList.pop();
        for (String str:linkedList){
            System.out.println(str);
       }
        System.out.println("-------------------");
        //将元素推入此链表所表示的堆栈 这个等效于addFisrt(E e)
        linkedList.push("h");
        for (String str:linkedList){
            System.out.println(str);
       }
   }
}

只讲干货

#有什么错误的地方大家多多担待,欢迎大家留下意见共同努力。


#需要什么技术的内容大家也可以积极留言。


#有升本的伙伴也可留言,后序也可更新升本内容C 和数据结构。


#有需要的伙伴或有什么问题直接联留下wx或联系邮箱2821835676qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值