Java基础入门-集合;
以下所有内容,在jdk8
环境下
集合简介
Java
中的集合是一个名词,数据是一种容器,用于溶解数据,Java
提供了完整的集合框架
什么时候需要一个容纳数据的容器,也就是集合对象?
Java集合框架中就包含了对不确定个数的数据处理的集合类
如果只是为了容纳数据,可以是直接使用数组,为什么要学习集合?
数组使用起来不方便,在数据格式不确定的场合,数组使用起来不是很方便
总结: 对不确定的有关系的数据进行相同的逻辑处理的场合,使用集合是一个不错的选择
根据数据的不同,Java
的集合分为2大体系:
单一数据体系: Collection
接口定义了相关的规则
成对的数据体系: Collection
接口定义了相关的规则
所谓的成对的数据,就是2个数据有关系,可以根据第一个数据关联到第二个数据,也称之为键值对数据,(12345,dafei)=>(key,value)
集合-常用的接口和类
Collection
接口
常用的子接口
- List: 按照插入顺序保存数据, 数据可以重复的,具体的实现类:
ArrayList
,LinkedList
- Set: 集,无序保存,数据不能重复,具体的实现类:
HashSet
- Queue: 队列,具体的实现类:
ArrayBlockingQueue
Map
接口
具体的实现: HashMap
和 Hashtable
ArrayList
基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
ArrayList list = new ArrayList();
list.add("论语"); list.add("史记"); list.add("史记");
for (int i = 0; i < list.size(); i++) { System.out.println("集合中数据: "+list.get(i)); }
for (Object objItem : list) { System.out.println("当前集合中数据" + objItem); }
System.out.println(list);
|
ArrayList
的常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| ArrayList list = new ArrayList();
list.add("论语"); list.add("史记"); list.add("左传"); list.add("论语");
list.add(1, "战国策");
ArrayList otherList = new ArrayList(); otherList.add("1"); otherList.add("2"); otherList.add("3"); list.addAll(otherList);
list.size(); list.clear(); list.removeAll(otherList); list.isEmpty();
list.contains("史记"); list.indexOf("论语"); list.lastIndexOf("论语");
Object[] objects = list.toArray();
Object clone = list.clone(); ArrayList list1 = (ArrayList)clone;
|
LinkedList
基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
LinkedList list = new LinkedList();
list.add("论语"); list.addFirst("史记"); list.add(1,"左传");
list.getFirst(); list.getLast(); System.out.println(list);
for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } for (Object obj : list) { System.out.println(obj); }
list.set(1, "修改了"); list.remove("史记");
|
LinkList
常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| LinkedList list = new LinkedList();
list.add("论语"); list.add("史记"); list.add("左传");
list.add(1, "汉书"); list.addFirst("战国策"); list.addFirst("战国策22");
LinkedList list1 = new LinkedList(); list1.add("论语_2"); list1.add("史记_2"); list1.add("左传_2"); list.addAll(list1);
list.size(); list.isEmpty(); list.clear(); list.contains("论语"); list.element(); list.indexOf("aaa"); list.lastIndexOf("sss");
list.push("aaa"); list.pop();
|
泛型
1 2 3 4
| class MyContainer<fei>{ public fei data; }
|
比较器Comparator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ArrayList list = new ArrayList(); list.add(1); list.add(3); list.add(2); list.add(7); list.add(5);
System.out.println(list);
list.sort(new FeiComparator()); System.out.println(list);
class FeiComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }
|
Set
接口
HashSet
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| HashSet set = new HashSet();
set.add("论语"); set.add("史记"); set.add("左传");
for (Object item : set) { System.out.println(item); }
|
HashSet
常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| HashSet set = new HashSet();
ArrayList list = new ArrayList(); list.add("论语"); list.add("史记"); list.add("左传"); set.addAll(list);
Object[] objects = set.toArray(); set.isEmpty(); set.contains("论语"); set.size(); set.clear(); Object clone = set.clone();
|
HashSet
重复数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| HashSet set = new HashSet();
User user1 = new User(); user1.id = 1001; user1.name = "论语";
User user2 = new User(); user2.id = 1001; user2.name = "论语";
User user3 = new User(); user3.id = 1002; user3.name = "左传";
set.add(user1); set.add(user2); set.add(user3);
System.out.println(set);
class User { public int id; public String name;
@Override public int hashCode() { return id; }
@Override public boolean equals(Object obj) { if (obj instanceof User) { User otherUser = (User) obj; if (otherUser.id == this.id && otherUser.name.equals(this.name)) { return true; } return false; }else { return false; } }
@Override public String toString() { return "User[" + id + ", " + name + ']'; } }
|
Queue
操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| ArrayBlockingQueue queue = new ArrayBlockingQueue(3);
boolean isTrue1 = queue.offer("论语"); System.out.println(isTrue1); boolean isTrue2 = queue.offer("史记"); System.out.println(isTrue2); boolean isTrue3 = queue.offer("左传"); System.out.println(isTrue3); boolean isTrue4 = queue.offer("汉书"); System.out.println(isTrue4);
|
HashMap
基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| HashMap map = new HashMap();
map.put("1", "论语"); map.put("2", "史记"); map.put("3", "左传");
Object o1 = map.get("1"); map.remove("3");
System.out.println(map);
|
HashMap
常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| HashMap map = new HashMap();
map.put("1", "论语"); map.put("1", "史记");
map.putIfAbsent("2", "左传"); map.putIfAbsent("2", "汉书");
map.remove("2", "战国策");
map.clear(); map.put("1", "论语"); map.put("2", "史记"); map.put("3", "汉书");
Set set = map.keySet(); for (Object key : set) { Object o = map.get(key); }
map.containsKey("1"); Collection values = map.values();
map.remove("1","xxx");
System.out.println(map);
|
Hashtable
1 2 3 4 5
| Hashtable 月 HashMap 区别 01) 实现方式不一样,继承父类不一样 02) HashMap的<K,V>都可以是空,Hashtable的<K,V>不可以是空 03) HashMap的数据定位采用的是Hash算法,但是Hashtable采用的就是hashcode 04) Hasmap的性能较高,但是Hashtable比较低
|
迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| HashMap<String,String> map = new HashMap<String,String>(); map.put("1", "论语"); map.put("2", "史记"); map.put("3", "汉书");
Set<String> keys = map.keySet(); for (Object key : keys) { if (key.equals("1")) { map.put("4","我也会报错"); } } System.out.println(map);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| HashMap<String,String> map = new HashMap<String,String>(); map.put("1", "论语"); map.put("2", "史记"); map.put("3", "汉书");
Set<String> keys = map.keySet(); Iterator<String> iterator = keys.iterator(); while (iterator.hasNext()) { String key = iterator.next(); if (key.equals("2")) { iterator.remove(); } }
System.out.println(map);
|
Arrays
工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int[] is = {3, 5, 2, 1, 4}; int[] is1 = {1, 2, 3, 4, 5}; int[] is2 = {1, 2, 3, 4, 5, 6};
String s = Arrays.toString(is); System.out.println(s);
System.out.println(is);
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
Arrays.sort(is); System.out.println(Arrays.toString(is));
Arrays.binarySearch(is,3);
Arrays.equals(is, is1);
|
stream 处理集合
1 2 3 4
| List<Integer> list = Arrays.asList(111, 222, 3333, 4444); List<Integer> filterList = list.stream().filter(d -> d > 222).collect(Collectors.toList()); System.out.println(list); System.out.println(filterList);
|
1 2 3
| List<Integer> num = Arrays.asList(1, 2, 3, 4, 5); List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList()); System.out.println(collect1);
|
底部
没有了