Java集合

目录

一.集合

1.概念

2.体系概述

 二.Collections接口

概念

常用方法

三.List接口

1.概念

2.常用方法

(1)ArrayList的常用方法

(2)LinkedList的常用方法

(3)Vector

(4)增强for循环

四.set接口

1.概念

2.HashSet

3.TreeSet

概念

示例

五.Map接口

 概念

HashMap

TreeMap

Hashtable

Map遍历


一.集合

1.概念

数组有什么缺点?

● 数组一旦定义,长度将不能再变化。

● 然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需

要一些能够动态增长长度的容器来保存我们的数据。

● 而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结

构。Java中对于各种数据结构的实现,就是我们用到的集合。

2.体系概述

Java 的集合框架是由很多接口、抽象类、具体类组成的,都位于 java.util 包中。

 二.Collections接口

概念

        

Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义

了存储方式。

● Set 中的数据对象不可以重复。

● List 中的数据对象有顺序(添加顺序)且可以重复。

常用方法

  /*
          addAll(Collection<? super T> c, T... elements); 将指定的可变长度参数数据添加到指定的集合中
          sort(list);
        */
        ArrayList<Integer> list = new ArrayList<>();
                           list.add(1);
                           list.add(2);
        Collections.addAll(list,3,4,7,6,5);
        Collections.sort(list);//默认是升序的
        //自定义排序规则
        /*Collections.sort(list, new Comparator<Integer>() { //创建了一个实现Comparator接口的匿名内部类对象  就是省去创建一个类,为了简化语法
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.intValue() - o1.intValue();
            }
        });*/

        System.out.println(Collections.binarySearch(list,8));
        System.out.println(list);
       // test(1,2,3,4,5);
    }


    /*
       int...a 可变长度的参数, 本质是一个数组
       一个参数列表中只能有一个可变长度参数
       必须放在参数列表的最后
     */
    public static  void test(int b,int...a){
        System.out.println(Arrays.toString(a));
    }
  /*
         swap(List<?> l ist, int i, int j)  交换指定位置上的元素
         copy(list1,list); 集合复制, 将源集合 复制到目标集合  要求目标集合size 大于等于 源集合的size
         fill(list,v) 用指定的值 替换到集合中的所有元素
         shuffle(list) 随机排序
         reverse(list) 逆序
         */
        ArrayList<Integer> list = new ArrayList<>();
                           list.add(1);
                           list.add(2);
                           list.add(3);
                           list.add(4);
        ArrayList<Integer> list1 = new ArrayList<>();
                           list1.add(5);
                           list1.add(6);
                           list1.add(7);
                           list1.add(8);
                           list1.add(9);
               //Collections.swap(list,0,1);
              //Collections.copy(list1,list);
              //Collections.fill(list,8);
        System.out.println(Collections.max(list));
        System.out.println(Collections.min(list));
        Collections.shuffle(list);
        Collections.reverse(list);
        System.out.println(list);
        System.out.println(list1);

三.List接口

1.概念

List继承了Collection接口,有三个实现的类

- ArrayList

数组列表,数据采用数组方式存储。

-LinkedList

链表

-Vector

数组列表,添加同步锁,线程安全的

ArrayList实现了长度可变的数组,在内存中分配连续的空间。

遍历元素和随机访问元素的效率比较高

LinkedList采用链表存储方式。插入、删除元素时效率比较高

  集合容器类中默认可以添加Object类型,

  但是一般还是习惯一个集合对象中只保存同一种类型.

  因为保存多个类型,后期处理时,涉及到类型转换问题

2.常用方法

(1)ArrayList的常用方法

add(E element)

add(int index, E element)

get(int index)

indexOf(Object o)

lastIndexOf(Object o)

remove(int index) 删除并返回指定位置元素

set(int index, E element)

(2)LinkedList的常用方法

add(int index,Object element)

addFirist(Object element)

addLast(Object element)

get(int index)

removeFirst()

removeLast()

remove(int index)

getFirst()

getLast()

(3)Vector

        Vector<String> vector = new Vector();
                    vector.add("a");
                    vector.add("b");
                    vector.add("c");
                    vector.add("c");
                    vector.size();
        System.out.println(vector);

(4)增强for循环

增强for循环遍历元素时,不允许修改集合元素(删除,添加)

for(String s:arrayList){
             // arrayList.remove(s);
              System.out.println(s);
             //arrayList.add("1");
         }

四.set接口

1.概念

Set接口继承了Collection接口。

Set中所存储的元素是不重复的,但是是无序的, Set中的元素是没有索引的

2.HashSet

HashSet类中的元素不能重复

 /*
          Set: 元素时不重复
          HashSet: 元素是无序的.
         */

        HashSet<String> set = new HashSet<>();
                       set.add("a");
                       set.add("a");
                       set.add("b");
                       set.add("c");
                       set.add("s");
                       set.add("x");
                       set.add("d");
        //              set.clear();
        //        set.contains("c");
        //        set.isEmpty();
        //        set.remove("s");
        //        set.size();
                // set.iterator();

3.TreeSet

概念

                不能存储重复元素的

                可以根据值进行排序,底层使用了树结构,本身是有序的

                向树形结构中添加元素时,如何判断元素大小以及元素是否重复

                向TreeSet中添加的元素类型必须实现Comparable接口,重写compareTo(),

                每次添加元素时,调用compareTo()进行元素大小判断(小于0放左子节点,等于0表示重复元素,覆盖元素,大于0放右子节点)

示例

        TreeSet<Integer> treeSet = new TreeSet<Integer>();
                         treeSet.add(2);
                         treeSet.add(1);
                         treeSet.add(3);
                         treeSet.add(3);
                         treeSet.add(4);
        System.out.println(treeSet);

五.Map接口

 概念

                将键映射到值的对象

                一个映射不能包含重复的键

                每个键最多只能映射到一个值

HashMap

        HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个
为null的键
        HashMap<String,String> map = new HashMap<>();
                               map.put("a","aa");
                               map.put("b","bb");
                               map.put("w","ww");
                               map.put("c","cc");
                               map.put("a","aaa"); //向map中添加一组键 值对
                               map.put(null,"aaaaaa");

TreeMap

  底层使用树形结构存储键值
  键可以排序
  键元素类型必须实现Comparable接口,重写compareTo(),
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(2,"aa");
        treeMap.put(1,"aa");
        treeMap.put(3,"aa");
        treeMap.put(3,"aa");
        treeMap.put(4,"aa");
        treeMap.containsKey(1);
        treeMap.isEmpty();
        treeMap.size();
        treeMap.get(1);
        System.out.println(treeMap);

Hashtable

Hashtable
    底层实现也是用到key的哈希值
    方法上都添加了synchronized锁
    Hashtable中不能存储为null的键和为null的值


        Hashtable<String, String> map = new Hashtable<>();
        map.put("b","bb");
        map.put("a","aa");
        map.put("c","cc");
        map.put("b","bbb");
        System.out.println(map);

Map遍历

 HashMap<String,String> map = new HashMap<>();
                               map.put("a","aa");
                               map.put("b","bb");
                               map.put("w","ww");
                               map.put("c","cc");
                               map.put("a","aaa"); //向map中添加一组键 值对
                               map.put(null,"aaaaaa");
        //map遍历
        //方式1:先拿到所有的键   遍历键 根据键找值
        Set<String> keyset = map.keySet();
        for(String key : keyset){
            System.out.println(key+":"+map.get(key));
        }
        System.out.println();
        //方式2:推荐遍历方式
        Set<Map.Entry<String,String>> entries = map.entrySet();
        for(Map.Entry entry : entries){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值