Java集合

1.集合的继承体系

 

  • Collection存放的是放单个的元素,可重复出现
  • Map存放的是键值对,只能出现一次

2.Collection接口的常用方法

  1. 添加功能

    boolean add (Object obj):添加一个元素

    boolean addAll(Collection c) : 添加一个集合的元素

  2. 删除功能

    void clear():移除一个元素

    boolean remove(Object o):移除一个元素

    boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有)

  3. 判断功能

    boolean contains(Object o):判断集合中是否包含指定元素

    boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)

    boolean isEmpty():判断集合是否为空

  4. 获取功能

    Iterator iterator()(重点)

  5. 长度功能

    int size():元素的个数

  6. 交集功能

    boolean retainAll(Collection c):两个集合都有的元素,元素到了第一个集合中,返回的boolean是如果,有相同的元素赋值给第一个几个,为真

  7. 把集合转换为数组

    Object[] to Array()

代码示例:

         //添加一个元素
        collection.add(6);
        System.out.println(collection);
        //添加所有元素
        Collection collection2 = new ArrayList();
        collection2.add(1);
        collection2.addAll(collection);
        collection2.clear();  //清除所有
        System.out.println(collection2);
        //移除一个元素
        collection.remove(6);
        System.out.println(collection);
        //移除一个集合的元素
        collection.removeAll(collection);
        System.out.println(collection);
        //判断集合中是否包含指定元素
        System.out.println(collection2.contains(1));
        //判断集合中是否包含指定的集合元素
        System.out.println(collection.containsAll(collection));、
         //判断集合是否为空
        System.out.println(collection.isEmpty());
        //集合长度
        System.out.println(collection2.size());
         //交集
         //如果collection2与collection有交集,会把交集全部放到collection2里面,然后把collection2删掉,如果collection2的值变化过就返回的ture没变化就返回false
        System.out.println(collection2.retainAll(collection));
         //集合转换为数组
        Object object = collection.toArray();
        //数组转换为集合
        int []a = {8};
        Arrays.asList(a);

3.Iterator迭代器

  • Iterator对象称为迭代器,主要用于遍历 Collection 集合中的元素,这是集合独有的遍历方式

  • 所有实现了 Collection 接口的集合类都有一个 iterator() 方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器

  • Iterator 仅用于遍历集合,Iterator 本身并不存放对象

  • while
  • for
         //迭代器 获取集合迭代器
        Iterator iterator = collection.iterator();
        //判断下一行是否有值
        //while循环
        while (iterator.hasNext()) {
        //输出值 且光标挪到下一行
            System.out.println(iterator.next());
            }
        //如果有两个next会报错元素异常(NoSuchElementException)
        Iterator iterator = null ;
        //for循环
        for (iterator = collection.iterator();;iterator.hasNext()) {
            System.out.println(iterator.next());
        }    

 

4.List (子接口)

  • 有序的集合而且允许重复功能存在

     List list = new ArrayList();
             list.add(5);
             list.add(6);
             list.add(7);
             list.add(5);
             System.out.println(list);

     

  • List集合的特有功能:

    1.添加功能

    void add (int index,Obkect element):在指定位置添加元素 // 重载的方法

    2.获取功能

    Object get(int index):获取指定位置元素

    3.列表迭代器

    Listlterator listlterator():List集合特有的迭代器

    4.删除功能

    Object remove(int index):根据索引删除元素,返回被删除的元素

    5.修改功能

    Object set(int index,Object element):根据索引修改元素,返回被修饰的元素

5.常见数据结构

  • 数组:连续的存储空间----查询快,增删慢

  • 链表:不连续,中间用箭头指向

  • 队列: 先进先出

  • 栈: 先进后出

  • 堆:

  • 树: 二叉树 数字小的左边放,数字大的右边放

  • 图: 人物关系图Java的jvm运行机

6.实现类

  • ArrayList:

    底层数据结构是数组,查询快,增删慢。线程不安全,效率高。

  • Vector:

    底层数据结构是数组,查询快,增删慢。线程安全,效率低。

  • LinkedList:

    底层数据结构是链表,查询慢,增删快。线程不安全,效率高。

    • LinkedList独有方法:模拟栈操作

7.泛型

  • “泛型”的字面意思就是广泛的类型。类、接口和方法代码可以应用于非常广泛的类型,代码与它们能够操作的数据类型不再绑定在一起,同一套代码可以用于多种数据类型,这样不仅可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。jdk1.5提供
  • 把运行时期的问题提前到了编译期
  • 避免强制类型转换
  • 优化程序设计 

8.foreach循环

for(元素数据类型 变量 : 数组或者Collection集合) {使用用变量即可,该变量就是元素}
Arraylist<Integer> list=new Arrayist<Integer>();
    for(Integer a:list){
            system.out.println(a);
       }
//循环前先判断是否为null

 

9.Set子接口

无序,不允许重复

  • hashset

    • 不保证顺序

    • 底层数据结构是哈希表

  • linkedhashset

    • 底层是哈希表加链表

    • 哈希表保证唯一性,链表保证有序

  • treeset

    • 可以排序

      • 使用元素自然排序

      • 使用Comparator

代码示例:

//HashSet    
HashSet<String> set=new HashSet<>();
        set.add("123");
        set.add("456");
        set.add("123");
        set.add("sggb");
        System.out.println(set);
//LinkedHashSet
Set<String> set=new LinkedHashSet<>();
    set.add("123");
    set.add("456");
    set.add("fdsag");
    set.add("456");
    for(String s:set) {
        System.out.println(s);     //123,456,fdsag
    }
//TreeSet
Set<String> set=new TreeSet<String>();
    set.add("123");
    set.add("789");
    set.add("234");
    set.add("456");
    set.add("456");
    for(String s:set) {
        System.out.println(s);    //123,234,456,789
    }

 

10.Map

  • Map和Collection的区别
    • map存储元素是成对出现的,键是唯一的,值可重复

    • Collection存储元素是单独的

    • map集合的数据结构只针对键有效,和值无关

    • Collection的数据结构针对元素有效

  • Map的功能:

    1:添加功能

    V put(K key,V value):添加元素。这个其实还有另一个功能

    如果键是第一次存储,就直接存储元素,返回null

    如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

    2:删除功能

    void clear():移除所有的键值对元素

    V remove(Object key):根据键删除键值对元素,并把值返回

    3:判断功能

    boolean containsKey(Object key):判断集合是否包含指定的键

    boolean containsValue(Object value):判断集合是否包含指定的值

    boolean isEmpty():判断集合是否为空

    4:获取功能

    Set<Map.Entry<K,V>> entrySet():???

    V get(Object key):根据键获取值

    Set keySet():获取集合中所有键的集合

    Collection values():获取集合中所有值的集合

    5:长度功能

    int size():返回集合中的键值对的对数

代码示例:

Map<Integer, String> map = new HashMap<Integer, String>();
        // 添加功能
        map.put(1001, "张三");
        map.put(1002, "李四");
        map.put(1003, "Tom");
        map.put(1004, "Jack");
        System.out.println(map);
        //删除功能
        System.out.println(map.remove(1004));
        System.out.println(map);
        //判断功能
        System.out.println(map.containsKey(1004)); //false 已经把1004删除掉了
        System.out.println(map.containsKey(1002)); //true
        System.out.println(map.containsValue("李四"));//集合是否包含指定的值
        System.out.println(map.isEmpty()); //集合是否为空
        //获取功能
        System.out.println(map.get(1001));//根据键获取值
        //获取map集合
        Set<Map.Entry<Integer, String>> set = map.entrySet();
        Iterator<Map.Entry<Integer, String>> iterator = set.iterator();
        //用迭代器输出
        while(iterator.hasNext()) {
             Map.Entry<Integer, String> entry = iterator.next();
             System.out.println(entry.getKey()+"----"+entry.getValue());
        }
        //获取集合中所有键的集合
        Set<Integer> set2 = map.keySet();
        for(Integer aaa:set2) {
            //通过键找到值
            String vaule = map.get(s1);
            System.out.println(aaa);
        }
        //获取集合中所有值的集合
        Collection <String> list = map.values();
        System.out.println(list);

        //长度
        System.out.println(map.size());

 

11.实现类

  • HashMap
    • 键是哈希表结构,可以保证键的唯一性
  • LinkedHashMap
    • Map接口的哈希表和链接列表实现,具有可预知的迭代顺序
  • TreeMap
    • 键是红黑树结构,可以保证键的排序和唯一性

12.Collections

Collections:是针对集合进行操作的工具类,都是静态方法

-

面试题

1.Collection和Collections的区别?
  • Collection:是单列集合的顶层接口,有子接口List和Set。
  • Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
2.HashMap和Hashtable的区别
  • HashMap线程不安全,效率高
  • Hashtable线程安全,效率低

3.List,Set,Map等接口是否都继承子接口

  • List,Set它们继承Collection接口
  • Map接口本身就是一个接口

 

posted @ 2022-05-13 17:30  小炸O  阅读(59)  评论(0)    收藏  举报