• Java-集合


    1.java-集合

    1.1Java集合图

    在这里插入图片描述

    在这里插入图片描述在开发中一般很少用Collection接口进行开发,基本上使用其子接口。子接口有List、Set、Queue、SortedSet。

    1.2List接口

    List是Collection的子接口,其中可以保存各个重复的内容。

    1.2.1定义

    public interface List<E> extends Collection<E>
    
    • 1

    1.2.2List常用的方法

    序号方法描述
    1List.add()在指定位置增加元素
    2List.addAll()在指定位置增加一组元素
    3List.get()返回指定元素的位置
    4List.index()查找指定元素的位置
    5List.lastIndexOf()从后向前查找指定元素的位置
    6List.ListIterator为ListIterator接口实例化
    7List.remove按指定的位置删除元素
    8List.subList()取出集合中的子集合
    9List.set()替换指定位置的元素

    向集合添加元素

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> allList=null;
            allList=new ArrayList<>();
            allList.add("hello");
            allList.add("hello");
            allList.add("hello");
            allList.add("hello");
            System.out.println(allList);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述删除元素

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> allList=null;
            allList=new ArrayList<>();
            allList.add("hello1");
            allList.add("hello2");
            allList.add("hello3");
            allList.add("hello4");
            System.out.println("------------");
            allList.remove("hello1");
            System.out.println(allList);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    1.2.3ArrayList

    输出全部元素

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> allList=null;
            allList=new ArrayList<>();
            allList.add("hello1");
            allList.add("hello2");
            allList.add(0,"helloF");
            allList.add("hello4");
            for (int i = 0; i < allList.size(); i++) {
                System.out.print(allList.get(i)+",");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述总结:
    平常用ArrayList比较多,ArrayList的性能更高,采用异步处理的方式,属于非线程安全的操作类,只能用Iterator、foreach输出。

    1.2.4LinkdList

    LinkdList表示的是一个链表的操作类。

    方法描述
    addFirst()在链表的开头增加元素
    addLast()在链表的尾部增加元素
    offer()将指定元素增加到链表的结尾
    removeFirst()删除链表的第一个元素
    removeLast()删除链表的最后一个元素

    为链表增加数据

    public class OverrideDemo01 {
        public static void main(String[] args) {
            LinkedList<String> link = new LinkedList<String>();
            link.addFirst("A");
            link.addFirst("B");
            link.addFirst("C");
            link.addFirst("D");
            link.addFirst("E");
            System.out.println(link);
            System.out.println("--------");
            link.addLast("O");
            System.out.println(link);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述其他的方法不在演示。

    1.3Set接口

    set接口也是Collection接口的子接口,但是与Collection或List接口不同,Set接口不能加入重复的元素

    1.3.1HashSet

    HashSet是Set接口中的一个子类,特点是里面不能存放重复的元素,而且采用散列的存储方式,所有没有顺序。

    验证HashSet类

    public class OverrideDemo01 {
        public static void main(String[] args) {
            HashSet<String> se = new HashSet<String>();
            se.add("A");
            se.add("B");
            se.add("C");
            se.add("C");
            se.add("C");
            System.out.println(se);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述对于重复的元素只会增加一次,而且程序运行时向集合中加入的顺序并不是集合中的保存顺序。证明HashSet类是无序的。

    1.3.2TreeSet

    如果想对输入的数据进行有序的排列可以用TreeSet。

    public class OverrideDemo01 {
        public static void main(String[] args) {
            TreeSet<String> se = new TreeSet<String>();
            se.add("C");
            se.add("A");
            se.add("C");
            se.add("B");
            se.add("C");
            System.out.println(se);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    在插入数据是没有顺序的,但是输出之后数据据是有序的,所以TreeSet是可以排序的子类。

    1.3.3关于重复元素的说明

    class Person{
        private String name;
        private int age;
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public boolean equals(Object obj){
            if(this==obj){
                return true;
            }
            if (obj instanceof Person){
                return true;
            }
    
            Person p=(Person) obj;
            if(this.equals(p.name)&&this.age==p.age){
                return true;
            }else{
                return false;
            }
        }
    
        @Override
        public int hashCode(){
            return this.name.hashCode() * this.age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    public class OverrideDemo01 {
        public static void main(String[] args) {
            Set<Person> allSet = new HashSet<Person>();
            allSet.add(new Person("张三", 66));
            allSet.add(new Person("张三", 66));
            allSet.add(new Person("张三", 66));
            allSet.add(new Person("张三", 66));
    
            allSet.add(new Person("李四", 66));
    
            System.out.println(allSet);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    在这里插入图片描述消除重复的Person ,正是因为equals和hashCode共同作用的结果。

    1.4集合的输出

    在集合中提供一下4中常见的输出方式。

    • Iterator:迭代输出,是最多的输出方式
    • ListIterator:专门用于输出List中的内容
    • Enumeration:功能类似于Iterator
    • foreah:可以输出数组或者集合

    1.4.1迭代输出Iterator

    方法描述
    hasNext()判断是否有下一个值
    next()取出当前元素
    remove()移出当前元素

    输出元素

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> all = new ArrayList<>();
            all.add("hello");
            all.add("--");
            all.add("world");
            Iterator<String> iter = all.iterator();
            while (iter.hasNext()){
                System.out.print(iter.next()+",");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    删除元素

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> all = new ArrayList<>();
            all.add("hello");
            all.add("-");
            all.add("world");
            Iterator<String> iter = all.iterator();
            while (iter.hasNext()){
                String next = iter.next();
                if("-".equals(next)){
                    iter.remove();
                }
            }
            System.out.println(all);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    1.4.2foreach输出

    使用foreach输出数组,同样也支持集合的输出。

    使用foreach输出

    public class OverrideDemo01 {
        public static void main(String[] args) {
            List<String> all = new ArrayList<>();
            all.add("hello");
            all.add("-");
            all.add("world");
            for (String s : all) {
                System.out.println(s);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    1.5Map接口

    Map中每对key—>value都表示一个完整的内容,是一个二元偶对象。

    Map<K,V>
    
    • 1

    1.5.1常用的方法

    方法描述
    clear()清空Map集合
    containsKey()判断指定的key是否存在
    containsValue()判断指定的value是否存在
    equals()对象的比较
    get()根据key取得value
    hashCode()返回哈希码
    isEmpty()判断集合是否为空
    put()向集合加入元素

    1.5.2 相关操作实例

    增加和取得内容

    public class OverrideDemo01 {
        public static void main(String[] args) {
            HashMap<String, String> map = new HashMap<>();
            map.put("k1", "v1");
            map.put("k2", "v2");
            map.put("k3", "v3");
            map.put("k4", "v4");
            System.out.println(map.get("k1"));
            System.out.println(map.get("k2"));
            System.out.println(map.get("k3"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    判断指定内容是否存在

    public class OverrideDemo01 {
        public static void main(String[] args) {
            HashMap<String, String> map = new HashMap<>();
            map.put("k1", "v1");
            map.put("k2", "v2");
            map.put("k3", "v3");
            map.put("k4", "v4");
            System.out.println(map.containsKey("k1"));
            System.out.println(map.containsValue("v2"));
            System.out.println(map.containsValue("v11"));
            System.out.println(map.containsValue("v22"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    输出全部Key与value

    public class OverrideDemo01 {
        public static void main(String[] args) {
            HashMap<String, String> map = new HashMap<>();
            map.put("k1", "v1");
            map.put("k2", "v2");
            map.put("k3", "v3");
            map.put("k4", "v4");
            Set<String> strings = map.keySet();
            Collection<String> list = map.values();
            Iterator<String> iter = strings.iterator();
            while (iter.hasNext()){
                System.out.println(iter.next());
            }
            Iterator<String> iterator = list.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

  • 相关阅读:
    回溯算法!
    【Candence报错】Discrepancy #i in TASK
    Linux下Nginx的安装和配置
    Vue 中setup的特性
    超越边界:如何ChatGPT 3.5、GPT-4、DALL·E 3和Midjourney共同重塑创意产业
    企业信用等级评价认证是什么
    【MCAL_CANDriver】-1.4-Tq与Bit Rate,Sync_Seg,Prop_Seg,Phase_Seg1, Phase_Seg2之间的关系
    数据在内存如何分布的?
    短视频矩阵源码系统
    详解Native Memory Tracking之追踪区域分析
  • 原文地址:https://blog.csdn.net/qq_52166656/article/details/126770934