JAVA基础-集合(List与Map)

目录

引言

一,Collection集合

1.1,List接口

1.1.1,ArrayList

1.1.1.1,ArrayList的add()添加方法

 1.1.1.2,ArrayList的remove()删除方法

1.1.1.3,ArrayList的contains()判断方法

1.1.1.4,ArrayList的set()排序方法和size()大小方法

1.1.1.5,ArrayList的遍历

1.1.2,LinkedList

1.2,Set接口

1.2.1,HashSet

1.2.1.1,HashSet的add()添加方法

1.2.1.2,HashSet的remove()删除方法

 1.2.1.3,HashSet的contains()判断方法

1.2.1.4,HashSet的size()大小方法和clear()清空方法

 1.2.2,Treeset

二,Map集合

2.1,HashMap集合

2.1.1,HashMap的put()添加方法

2.1.2,HashMap的get()获取方法

2.1.3,HashMap的containkey()和containvalue判断方法

2.1.4,HashMap的remove()删除方法

2.1.5,HashMap的遍历

2.1.5.1,HashMap的keyset()遍历方法

2.1.5.2,HashMap的values()遍历方法

2.2,TreeMap集合


引言

        程序中可能通过数组来保存多个对象,因为数组长度是不可变的。JDK中提供了一些特殊的类,这些类 可以存储任何对象,并且长度可变,在java中这些类被为集合。集合类位于 java.util 包中。

        集合有两大类:

  1. 单列集合 Collection 接口
  2. 双列集合 Map 接口

一,Collection集合

        java.util.Collection 是所有单列集合的父接口,因此在Collection中定义了单列集合 List 和 Set 通用的一些方法。

方法声明功能描述
boolean add(Object o)向集合中添加一个元素
boolean addAll(Collection c)增加一个集合(多个元素)
void clear()清空集合
boolean remove(Object o)删除集合中的一个对象(元素)
boolean removeAll(Collection c)删除一个集合(多个元素)
boolean isEmpty()是不是空的
boolean contains(Object o)判断集合有没有这个元素
boolean containsAll(Collection c)判断集合中有没有参数集合
Iterator iterator()返回一个遍历迭代器
int size()返回集合的元素个数

1.1,List接口

        List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List 集合,本质更象一个动态的数组。

        List的常用方法:

方法功能描述
void add(int index,Object element)向集合中指定位置添加一个元素
boolean addAll(int index,Collection c)向集合中指定位置增加一个集合(多个元素)
Object get(int index)获取指定位置元素
Object remove(int index)删除指定位置元素
Object set(int index,Object element)修改指定位置的元素
int indexOf(Object o)获取指定元素索引
int lastIndexOf(Object o)获取最后一个元素索引
List subList(int fromIndex,int toIndex)将指定索引对象对换

1.1.1,ArrayList

        java.util.ArrayList类是List接口的一个实现类,此对象相当于动态的数组。

        实例化ArrayList对象有几种方式:

实例演示:

        //实例化 ArrayList
        ArrayList list1 = new ArrayList();
        var list2 = new ArrayList();
        List list3 = new ArrayList();
        //此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)
        List list4 = List.of();
        //list4.add(10); 此行是错误的,因为List.of() 对象是只读的
        String[] arr = {"java","javascript","python","html"};
        //此方法实例出的对象,是只读的;list5.add(10);不可行
        List list5 = Arrays.asList(1,2,3);

        ArrayList的常用方法添加、删除、判断、大小输出,修改,,排序,遍历:

  • add()//添加
  • remove()//删除
  • contains()//判断
  • set()//设置指定位置元素更改为指定对象
  • size()//大小
1.1.1.1,ArrayList的add()添加方法

实例演示:

        //实例化,这们实例化,集合可以添加任何类型的元素 默认是Object
        List list = new ArrayList();
        //添加元素
        list.add(10);
        System.out.println(list);
        list.add(5.665);
        System.out.println(list);
        list.add("java");
        System.out.println(list);
        list.add("mysql");
        System.out.println(list);
        //在指定位置添加元素
        list.add(0, "python");
        System.out.println(list);
        //添加多个元素
        list.addAll(List.of("html", "css"));
        System.out.println(list);
        //在指定位置添加多个元素
        list.addAll(0, List.of(100, 200, 300, 400, 500));
        System.out.println(list);

输出结果:

 1.1.1.2,ArrayList的remove()删除方法

示例演示:

         List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //删除元素remove(Object o) remove(int index)
        //此时删除的是索引为5的元素,如果下标没有5就出异常
        //删除对象,成功返回布尔true,失败返回false
        var oo = list.remove(5);
        System.out.println(oo);
        //删除子集合,只要陈工删除一个元素就返回true
        System.out.println(list.removeAll(List.of("mysql", "java")));
        System.out.println(list);
        //清空集合
        list.clear();
        System.out.println(list);

输出结果:

1.1.1.3,ArrayList的contains()判断方法

示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //判断某一个元素是否存在
        System.out.println(list.contains("php"));
        //判断集合是否为空
        System.out.println(list.isEmpty());
        //判断多个元素是否都存在,有一个不存在就返回false
        System.out.println(list.containsAll(List.of("mysql", "java")));

 输出结果:

1.1.1.4,ArrayList的set()排序方法和size()大小方法

示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        System.out.println(list.size());
        list.set(0,"c++");
        System.out.println(list);

输出结果:

1.1.1.5,ArrayList的遍历

 示例演示:

        List list = new ArrayList();
        list.addAll(List.of("java","php","c","go","c++","java","c"));
        System.out.println(list);
        //集合遍历
        for (Object obj : list) {
            System.out.println(obj);
        }
        for (int i = 0; i < list.size(); i++) {
            System.out.printf("list.get(%d) = %s%n", i, list.get(i));
        }

 输出结果:

1.1.2,LinkedList

extends AbstractSequentialList

        LinkedList同时实现了 List 接口和 Deque 对口,也就是收它既可以看作一个顺序容器,又可以看作一 个队列(Queue),同时又可以看作一个栈(stack),这样看来,linkedList简直就是无敌的,当你需要使 用栈或者队列时,可以考虑用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是, Java里根本没有一个叫做Queue的类(只是一个接口的名字)。关于栈或队列,现在首选是ArrayDeque, 它有着比LinkedList(当作栈或队列使用时)更好的性能。

        LinkedList常用方法同ArrayList基本相同,可以参照Arraylist尝试。

1.2,Set接口

        Set接口继承了Collection接口,集合中元素是不能重复的。如果有相关的元素重复内容,就保留原来的 元素,添加的元素取消,不能随机读取元素,没有顺序。

        public interface Set extends Collection

1.2.1,HashSet

        实例化HashSet:

示例演示:

        HashSet hashset1=new HashSet();
        Set hashset2=new HashSet();
        var hashset=new HashSet();
1.2.1.1,HashSet的add()添加方法

示例演示:

        HashSet hashset=new HashSet();
        hashset.add("java");
        hashset.add("c");
        hashset.add("php");
        hashset.add("go");
        hashset.add("java");
        System.out.println(hashset);
        hashset.addAll(List.of("nihao","小明"));
        System.out.println(hashset);

输出结果:

1.2.1.2,HashSet的remove()删除方法

示例演示:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.remove(50));
        System.out.println(hashset);
        System.out.println(hashset.removeAll(List.of(80, 4, 3)));
        System.out.println(hashset);

输出结果:

 

 1.2.1.3,HashSet的contains()判断方法

示例演示:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.contains(5));
        System.out.println(hashset.containsAll(List.of(10, 5)));
        System.out.println(hashset.containsAll(List.of(10, 5,4)));

输出结果:

1.2.1.4,HashSet的size()大小方法和clear()清空方法

示例代码:

        HashSet hashset=new HashSet(List.of(10,50,30,80,5));
        System.out.println(hashset);
        System.out.println(hashset.size());
        hashset.clear();
        System.out.println(hashset);

输出结果:

 1.2.2,Treeset

        是一个有序,可排序的(默认是升序),不可重复元素的集合工具类。

示例演示:

        //实例化TreeSet对象
        //Set treemap=new TreeSet();
        TreeSet treeset=new TreeSet(List.of(5,9,8,4,55,4,1));
        System.out.println(treeset);

输出结果:

二,Map集合

         map接口是一个双列集合,每个元素有一个键值 对 Map

  • 1.Map是一个双列集合,一个元素包含两个值(一个key,一个value)
  • 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同
  • 3.Map中的元素,key不允许重复,value可以重复
  • 4.Map里的key和value是一一对应的。

        map集合方法:

2.1,HashMap集合

         HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着他不是线程安全的。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。 

        实例化HashMap

        //实例化HashMap,使用泛型
        Map<String,Integer> hash1=new HashMap<>();
        HashMap<String,Integer> hash2=new HashMap<>();
        //不使用泛型
        HashMap hash=new HashMap();

2.1.1,HashMap的put()添加方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);

输出结果:

  

2.1.2,HashMap的get()获取方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.get("小黑"));
        System.out.println(hash);

输出结果:

  

2.1.3,HashMap的containkey()和containvalue判断方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.containsKey("小黑"));
        System.out.println(hash.containsValue(1));

输出结果:

  

2.1.4,HashMap的remove()删除方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        System.out.println(hash.remove("小黑"));
        System.out.println(hash.remove("小吕", 1));

输出结果:

  

2.1.5,HashMap的遍历

2.1.5.1,HashMap的keyset()遍历方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        for (Object o : hash.keySet()) {
            System.out.println(o);
        }

输出结果:

  

2.1.5.2,HashMap的values()遍历方法

示例代码:

        HashMap hash=new HashMap();
        hash.put("小黑",1);
        hash.put("小黄",1);
        hash.put("小吕",1);
        hash.put("小黑",2);
        System.out.println(hash);
        for (Object value : hash.values()) {
            System.out.println(value);
        }

输出结果:

  

2.2,TreeMap集合

        1. 是一个有序的key-value集合,它是通过红黑树实现的。该映射根据其键的自然顺序进行排序,或 者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

        2. 是继承了AbstractMap,也是以key-value集合存储。实现了NavigableMap接口,可以支持一系列 的导航方法。 比如返回有序的key集合。实现了Cloneable克隆接口。实现了java.io.Serializable序列化接口。另 外,TreeMap是非线程同步的。

实例化TreeMap

        //实例化TreeMap,使用泛型
        Map<String,Integer> treemap1=new TreeMap<>();
        TreeMap<String,Integer> treemap2=new TreeMap<>();
        //不使用泛型
        TreeMap treemap=new TreeMap();

TreeMap应用

示例代码:

        TreeMap treemap=new TreeMap();
        treemap.put("小黑",1);
        treemap.put("小黄",1);
        treemap.put("小吕",1);
        treemap.put("小黑",2);
        System.out.println(treemap);

输出结果:

  

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰冰很社恐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值