概述
几种常用的集合
为什么要用集合
- 当我们需要操作一些类型相同的数据时,就会想到运用集合了,那为什么不用数组呢?因为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);
}
最后
以上就是不安小白菜为你收集整理的Java中常用的集合几种常用的集合的全部内容,希望文章能够帮你解决Java中常用的集合几种常用的集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复