Java中常用的集合

几种常用的集合

为什么要用集合

  • 当我们需要操作一些类型相同的数据时,就会想到运用集合了,那为什么不用数组呢?因为Java是面向对象语言,为了操作一些对象,就得把这些对象存储起来,而集合提供的的一些API很方便我们去操作存储的Java对象。

集合的分类

1、Collection:Collection是List、Set、Queue的接口。
2、Iterator:迭代器,主要用来遍历集合。
3、Map:是映射表(键值对)的接口。

List集合

  • List是有序集合有三个实现类,分别是ArrayList、Vector、LinkedList。
  • 集合的常用操作
    • add(数据):添加数据
    • remove(数据):删除数据
    • indexOf(数据):返回数据在集合中第一次出现式的索引位置的值
    • contains():该方法是判断字符串中是否有子字符串,有返回true。没有返回false。
    • clear():将list中的对象变成垃圾清空。
    • remove,contains,indexOf三个方法会默认去调用equals方法。
  • ArrayList
    • ArrayList最常用的集合,它的底层是一个数组,每个元素之间不能有间隔。它适合查找,不适合增删,从中间位置增删时,要对数组进行移动、复制、所费的代价比较高。当它的大小不满足时时会创建一个新数组,然后将旧数组的数据复制到新数组。
  • Vector
    • Vector内部实现类似于ArrayList。它支持线程同步,某时刻只能有一个线程能够写Vector。但花费很高,所以访问Vector比访问ArrayList慢。
  • LinkindeList
    • LinkedList底层是一个双向链表,所以很适合做插入、删除的操作。LinkedList继承于AbstractSequentialList,它同时也实现了Deque,Queue接口。它还提供了List接口中没有的方法,专门用于操作表头和表尾的元素,可以当堆栈、队列、双向链表使用。

List集合的遍历方式

  • 普通for循环
 ArrayList<String> a = new ArrayList<>();
        a.add("sdf");
        for (int i = 0 ; i<a.size(); i++){
            String s = (String) a.get(i);
            System.out.println(s);
        }
  • 增强for循环
ArrayList<String> a = new ArrayList<>();
        a.add("sdf");
        a.add("2222");
        for (String value:a) {
            System.out.println(value);
        }
  • 迭代器
 ArrayList<String> a = new ArrayList<>();
        a.add("sdf");
        a.add("2222");
        Iterator iterator = a.iterator();
        while (iterator.hasNext()){
            String s = (String) iterator.next();
            System.out.println(s);
        }

Set集合

  • Set集合是一个无序集合,Set中重复的数据只能添加一遍,JVM用hashcode和equals方法来判断是否重复,只有两个方法返回一致则认为是重复,先调用hashcode方法如果返回不一致则不调用equals方法,如果返回一致则调用equals方法再来判断是否一致。
  • 常见实现类

    • HashSet:HashSet存储元素的顺序并不是按照存入时的顺序而是按照哈希值来存取的。
    • TreeSet的作用是提供一个有序的Set集合,对新添加的元素按照指定的顺序排序。Integer和String对象都可以进行默认的排序,而自定义对象必须实现Comparable并重写相应的ComapreTo方法。
      Set 集合的遍历与List集合的遍历类似,只是它是无序的不能用普通for循环遍历

Iterator迭代器

  • Iterator不是一个集合,它是一个访问List 和Set集合的方法
  • 它的基本操作有
    • hasNext():如果有还元素可以迭代则返回true
    • next():返回迭代的下一个元素。
    • remove():将迭代器返回的元素删除。

Map集合

  • Map是一个接口,存储的是键值对。Map存储的键如果重复则会覆盖值。重复的意思是hashcode和equals方法做比较,只有两个都一致则会认为是重复。
  • 常用操作
    • put():添加数据。
    • get(key):获取单个数据。
    • keySet():获得键的集合。
    • values():获得所有值的集合。
    • entrySet():获得所有的entry对象(键值的集合)。
    • isEmpty():判断集合是否为空
    • size():获得数据的个数。
    • remove(key):删除某个值。
  • 常见实现类
    • HashMap在JDK1.8的底层是(数组+链表+红黑树)根据键的hashcode存储数据,大多是情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历的顺序不确实的。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。
    • ConcurrentHashMap
    • HashTable
    • TreeMap
    • LinkHashMap

Map集合的遍历

  • 通过键遍历值
 HashMap<Integer,String> map = new HashMap<>();
        map.put(1,"sssss");
        map.put(2,"aaaaa");
        map.put(3,"asdfb");
        for (int i :map.keySet()) {
            String s = map.get(i);
            System.out.println(s);
        }
  • 通过Iterator迭代器遍历key和value
HashMap<Integer,String> map = new HashMap<>();
        map.put(1,"sssss");
        map.put(2,"aaaaa");
        map.put(3,"asdfb");
       Iterator<Map.Entry<Integer,String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer,String> entry = iterator.next();
            System.out.println(entry.getKey()+"+"+entry.getValue());
        }
  • 通过Entry遍历key和value
HashMap<Integer,String> map = new HashMap<>();
        map.put(1,"sssss");
        map.put(2,"aaaaa");
        map.put(3,"asdfb");
        for (Map.Entry<Integer,String> entry:map.entrySet()) {
            System.out.println(entry.getKey()+"+"+entry.getValue());
        }
  • 通过map.values()遍历所有值
 HashMap<Integer,String> map = new HashMap<>();
        map.put(1,"sssss");
        map.put(2,"aaaaa");
        map.put(3,"asdfb");
        for (String s:map.values()) {
            System.out.println(s);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值