List,Queue和Set

目录

1.三者共同点

2.List接口

2.2.ArrayList的使用

2.3LinkList的使用

2.4ArrayList和LinkedList的区别

3.Queue接口

3.1LinkedList的使用(Queue)

3.2Deque 

 3.2.1ArrayDeque

4.Set接口

4.1hashSet

4.2TreeSet


 

1.三者共同点

这三个接口都是Collection的子接口,同时继承了 Collection 接口中的方法,并且扩展了自己特有的方法。

2.List接口

2.1List的特点:

1.有序性: List的元素是有序的,即可以按照插入顺序排序,也可以通过指定位置来操作元素(我们可以指定在那个位置插入那个元素,也可以指定那个位置删除元素)

2.允许重复元素:List中可以包含重复的元素,且每个元素都有单独的索引.

3.可以随机访问:List支持随机访问元素,只要我们知道元素的下标索引

4.支持排序:在List中可以使用sort来排序,也可以使用Comparator接口来定义自己的排序.

总结:List接口是有序的,可以有重复的元素,支持随机访问的具有通用操作方法和排序功能的集合接口.

2.2.ArrayList的使用

添加元素  add()

更改元素 set()

通过索引得到元素  get()

判断元素是否相等  contains()

转换成数组等  toArray()

......

import java.util.*;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add(null);
        arrayList.add(null);//如果你想想我一样在2,1位置插入元素,就应该怎么做,因为在插入"c"的时候会越界,先插个null就可以避免越界问题
        arrayList.add(2,"c");//此处插入2位置,当并没有替换掉null
        arrayList.add(1,"b");
//        arrayList.set(1,"b");//要替换的话,使用set即可
//        arrayList.set(2,"c");
//        对元素进行排序由于有null存在所以重写Collections方法
        Collections.sort(arrayList, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1 == null && o2 == null) {
                    return 0; // 两个 null 值相等
                } else if (o1 == null) {
                    return 1; // o1 为 null,o2 较大
                } else if (o2 == null) {
                    return -1; // o2 为 null,o1 较大
                } else {
                    return o1.compareTo(o2); // 比较 o1 和 o2 的大小
                }
            }
        });
//打印元素:
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
            //判断c是否在ArayList中
            System.out.println(  arrayList.contains("c"));
        }


        List<Integer> Larray = new ArrayList<>();
        Larray.add(1);
        Larray.add(2);
        Larray.add(3);
//        转换为数组
        Object[] a =new Object[Larray.size()];
        a = Larray.toArray();
      


        System.out.println(Arrays.toString(a)); // 输出:[1, 2, 3]
        }
    }

2.3LinkList的使用

LiinkList的底层是双向链表,链表之间通过引用将节点连接起来,所以在任意位置插入或者删除元素的时候,无需移动元素,效率比数组高.

add()    插入元素

set()     更改元素

contains()  判断元素是否在链表

indexOf(Object 0)    返回第一个o所在下标

......    

import java.util.LinkedList;

public class LinkedList1 {
    public static void main(String[] args) {
        LinkedList<Integer> linked = new LinkedList<>();
        //添加元素
        linked.add(1);
        linked.add(2);
        linked.add(3);
        //设置3的位置为4
        linked.add(3,4);
        //修改0位置为-1
        linked.set(0,-1);
        linked.add(666);
        linked.add(5);
        linked.add(666);
        //得到0位置的数字
        int t = linked.get(0);
        System.out.println("0下标的值为 "+t);
        linked.addFirst(666);
        //判断999是否在链表中
        boolean bl=linked.contains(999);
        System.out.println("999是否在链表:"+bl);
        System.out.println("遍历链表");
        for(int i:linked){
            System.out.print(i+" ");
        }


    }

}

2.4ArrayList和LinkedList的区别

 

3.Queue接口

3.1Queue的特点

1.先进先出(FIFO)

队列中的元素遵守先进先出的规则,最先进入队列的元素最先出列

2.限制访问

队列有两个限制访问的端点,一个是队头,一个是队尾,元素只能从队尾添加,队头删除

3.1LinkedList的使用(Queue)

offer()    添加元素

poll()     删除队首第一个元素并返回它

peek()   返回队首第一个元素

import java.util.LinkedList;
import java.util.Queue;

public class Queue1 {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        //添加元素
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        queue.offer(4);
        //遍历元素
        for (int i:queue){
            System.out.println(i);
        }
        System.out.println("返回第一个元素,并删除"+queue.poll());
        System.out.println("返回第一个元素"+queue.peek());
    }
}

3.2Deque 

双端队列( deque )是指允许两端都可以进行入队和出队操作的队列, deque “double ended queue” 的简称。
元素可以从队头出队和入队,也可以从队尾出队和如入队

 3.2.1ArrayDeque

add()   添加元素

addFirst()   在头部添加元素

addLast()    在尾部添加元素

getFirst()    获取头部元素

getLast()    获取尾部元素

pllFirst()     删除头部元素并返回

poppLast()  删除尾部元素并返回

removeFirst()    删除头部元素

removeLast()    删除尾部元素


        Deque<Integer> stack = new ArrayDeque<>();
        //添加元素
       stack.add(1);
       stack.addFirst(-1);
       stack.addLast(3);
       stack.add(4);
       stack.add(5);
       stack.add(6);
       stack.add(7);
       for (int i:stack){
           System.out.print(i+" ");
       }
        System.out.println();
       //删除元素
        stack.poll();
       stack.removeFirst();
       stack.removeLast();
        for (int i:stack){
            System.out.print(i+" ");
        }

4.Set接口

1.不允许有重复的元素

Set接口中的元素不允许重复,如果试图添加相同的元素,那么将不起作用,你可以添加,但是没用2.无序集合

与List接口不同,Set接口中的元素是无序的,所以不能通过索引来访问Set中的元素

3.装载类型不同

Set只能装对象类型的1元素,无法存储基本类型.如果需要存储基本类型,可以通过其对应的包装类型或者使用第三方库来实现

4.顺序不保障

实现Set接口的类不保障元素的顺序,在遍历Set时可能按照元素的插入顺序,哈希值顺序或者其他的顺序进行遍历.

总结:使用Set接口可以快速的判断一个集合中是否存在某个元素,同时保障集合中不会存在重复的元素,在处理大量元素时非常高效.

4.1hashSet

add()     添加数据

remove(Object o )    移除指定o若不存在则返回false,存在返回true并删除o

size()    获取Set中的元素个数

contains(Object o)   判断是否存在指定元素,存在返回true,否则返回false

clear()   清零

 

import java.util.HashSet;
import java.util.Set;

public class Set1 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        //添加元素
        set.add("Apple"); // 返回 true
        set.add("Banana"); // 返回 true
        set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
        set.add("peach");
        set.add("mango");
        set.add("Watermelon");
        //元素个数
       int t =  set.size();
        System.out.println("元素有:"+t);
        //删除元素
        set.remove("Apple");//返回true
        set.remove("banana");//返回false,"banana"不存在set中
        //判断元素是否存在
        set.contains("Apple");//返回true
        set.contains("banbana");//返回false
        //打印
        for(String st :set) {
            System.out.print(st+" ");
        }
        //清零
        set.clear();
        //无数据打印不了,你可以加两个数据进去试试
        for(String st :set) {
            System.out.print("这是清零后的:"+st+" ");
        }

    }
}

4.2TreeSet

add(E e)

向TreeSet中添加一个元素,如果元素已经存在,则不会对集合做任何改变,返回false;如果元素不存在,则插入该元素到正确的位置,并返回true。

remove(Object o)

从TreeSet中删除指定的元素,如果元素存在,则返回true;否则返回false。

size()    返回TreeSet中的元素个数。

contains(Object o)

检查指定元素是否存在于TreeSet中,如果存在,则返回true;否则返回false。

first()

返回TreeSet中的第一个元素,如果集合为空,则抛出NoSuchElementException异常。

last()

返回TreeSet中的最后一个元素,如果集合为空,则抛出NoSuchElementException异常。

lower(E e)

返回小于指定元素的最大元素,如果没有符合要求的元素,则返回null。

higher(E e)

返回大于指定元素的最小元素,如果没有符合要求的元素,则返回null。

ceiling(E e)

返回大于等于指定元素的最小元素,如果没有符合要求的元素,则返回null。

floor(E e)

返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。

 

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class Set1 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        //添加元素
        set.add("Apple"); // 返回 true
        set.add("Banana"); // 返回 true
        set.add("Apple"); // 返回 false,因为 "Apple" 已经存在于Set中了
        set.add("peach");
        set.add("mango");
        set.add("Watermelon");
        //元素个数
       int t =  set.size();
        System.out.println("元素有:"+t);
        //删除元素
        set.remove("Apple");//返回true
        set.remove("banana");//返回false,"banana"不存在set中
        //判断元素是否存在
        set.contains("Apple");//返回true
        set.contains("banbana");//返回false
        //打印
        for(String st :set) {
            System.out.print(st+" ");
        }
        //清零
        set.clear();
        //无数据打印不了,你可以加两个数据进去试试
        for(String st :set) {
            System.out.print("这是清零后的:"+st+" ");
        }
        TreeSet<Integer> settree = new TreeSet<>();
        //添加元素
        settree.add(1);//true
        settree.add(2);
        settree.add(3);
        settree.add(1);//false
        settree.add(5);
        //删除元素
        settree.remove(1);//true
        settree.remove(666);//false
        //返回元素个数
        int tt = settree.size();
        //是否存在元素
        settree.contains(2);//true
        settree.contains(666);//false
        //返回第一个元素,集合为空抛NOSuchElementException
         int first = settree.first();
        System.out.println("第一个元素:"+first);
        //返回TreeSet的最后一个元素,集合为空抛出NoSuchElementException
        int last = settree.last();
        System.out.println("最后一个元素:"+last);
        //返回小于指定元素的最大元素,如无返回null
        int lower = settree.lower(3);
        System.out.println("小于3的最大元素:"+lower);
        //返回大于指定元素的最小元素,如无返回null
        int highter = settree.higher(3);
        System.out.println("d大于3的最小元素"+highter);
        //返回大于等于指定元素的最小值,如无返回null
        int ceiling = settree.ceiling(3);
        System.out.println("大于等于3的最小元素"+ceiling);
        //返回小于等于指定元素的最大元素,如果没有符合要求的元素,则返回null。
        int floor = settree.floor(2);
        System.out.println("小于等于指定元素的最大元素"+floor);
        //遍历
        for(int i :settree){
            System.out.print(i+" ");
        }




    }
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值