【Java基础总结】集合框架

集合和数组的区别
集合只存储对象,长度是可变的;
数组既可以存储基本数据类型,又可以存储对象,但长度是固定的。
1. Collection接口

代码演示
1 List<String> c1 = new ArrayList<String>();
2 //判断集合是否为空 isEmpty()
3 if(c1.isEmpty()){
4 System.out.println("集合为空");
5 }
6
7 //添加元素 add(E e)
8 c1.add("北京");
9 c1.add("河南");
10 c1.add("山东");
11 System.out.println(c1); //打印结果:[北京, 河南, 山东]
12
13 //集合大小 size()
14 int size = c1.size();
15 System.out.println(size); //打印结果:3
16
17 //转为数组,返回结果只能是Object[],无法强转为其他类型数组 toArray()
18 Object[] arr = c1.toArray();
19 for(Object o : arr){
20 System.out.print(o);
21 }
22 System.out.println();
23
24 //转为指定数组 toArray(T[] t) //
25 String[] arr2 = new String[size];
26 arr2 = c1.toArray(arr2);
27 for(String s : arr2){
28 System.out.print(s);
29 }
30 System.out.println();
31
32 List<String> c2 = new ArrayList<String>();
33 c2.add("香港");
34 c2.add("澳门");
35 c2.add("台湾");
36
37 //向集合中添加指定集合 addAll(Collection<?> c)
38 c1.addAll(c2);
39 System.out.println(c1); //打印结果:[北京, 河南, 山东, 香港, 澳门, 台湾]
40
41 //判断集合中是否包含指定对象 contains(Object o)
42 if(c2.contains("台湾")){
43 //移除集合中的指定对象 remove(Object o)
44 c2.remove("台湾");
45 }
46 System.out.println(c2); //打印结果:[香港, 澳门]
47
48 //判断集合是否包含指定集合 containsAll(Collection c)
49 if(c1.containsAll(c2)){
50 //移除集合中的指定集合 removeAll(Collection c)
51 c1.removeAll(c2);
52 }
53 System.out.println(c1); //打印结果:[北京, 河南, 山东, 台湾]
54
55 c1.addAll(c2);
56 //保留集合中指定的集合元素 retainAll(Collection c)
57 c1.retainAll(c2);
58 System.out.println(c1); //打印结果:[香港, 澳门]
59
60 //遍历的2种方法
61 //第1种
62 Iterator<String> it = c1.iterator();
63 while(it.hasNext()){
64 System.out.println(it.next());
65 }
66 //第2种
67 for(String s : c1){
68 System.out.println(s);
69 }
2.1 List接口
特点:有序、有索引、可以重复
List接口的独有方法

代码演示
1 List<String> list = new ArrayList<String>();
2 //add(index, E element)
3 list.add(0, "太阳");
4 list.add(1, "月亮");
5 list.add(2, "地球");
6
7 List<String> list2 = new ArrayList<String>();
8 list2.add(0, "土星");
9 list2.add(1, "木星");
10 //addAll(index, Collection c) 在index位置添加集合
11 list.addAll(2, list2);
12
13
14 //listIterator()遍历
15 ListIterator<String> lit = list.listIterator();
16 //正向遍历
17 while(lit.hasNext()){
18 System.out.println(lit.nextIndex() + "." +lit.next());
19 }
20 //倒序遍历
21 while(lit.hasPrevious()){
22 System.out.println(lit.previousIndex() + "." +lit.previous());
23 }
24
25 //listIterator(int index) 部分遍历
26 ListIterator<String> lit2 = list.listIterator(1);
27 while(lit2.hasNext()){
28 System.out.println(lit2.nextIndex() + "," +lit2.next());
29 }
30
31 //indexOf(Object o) 查询元素在集合中的首次出现的位置
32 int index = list.indexOf("月亮");
33 //remove(index) 删除指定位置的元素
34 if(index>=0) list.remove(index);
35 //lastIndexOf(Object o) 查询元素在集合中的最后出现的位置
36 int lastIndex = list.lastIndexOf("月亮");
37 System.out.println(list);
38
39 //set(index, E e) 修改指定位置的集合元素
40 list.set(2, "火星");
41
42 int size = list.size();
43 for(int i=0; i<size; i++){
44 //get(index) 获取index位置的集合元素
45 System.out.println( i + ":" + list.get(i));
46 }
47 //subList(fromIndex, endIndex) 获取指定范围的集合元素
48 List<String> listCopy = list.subList(0, size);
49 System.out.println(listCopy);
ArrayList和LinkedList:ArrayList查询快,添加删除慢;LinkedList查询慢,添加删除快
2.2 Set接口
特点:无序,不重复
Set保证元素不重复的方法: e1.hashCode().equals(e2.hashCode()) && e1.equals(e2)
代码演示
1 Set<String> set = new HashSet<String>();
2 set.add("刘德华");
3 set.add("周杰伦");
4 set.add("王菲");
5 //集合元素无序
6 Iterator<String> it = set.iterator();
7 while(it.hasNext()){
8 System.out.println(it.next());
9 }
10
11 System.out.println(set);
12 set.add("周杰伦");
13 //集合元素不重复
14 System.out.println(set);
Set接口有2个实现类,HashSet和TreeSet。
其中TreeSet能够对元素进行排序,自定义排序的两种方法:
1. 集合元素继承Comparable接口,使自身具有比较性
2. 继承Comparator接口,创建一个比较器
1 public class CollectionDemo4{
2 public static void main(String[] args){
3 Set<Student> set = new TreeSet<Student>();
4 set.add(new Student("小明", 20));
5 set.add(new Student("小强", 21));
6 set.add(new Student("小红", 19));
7
8 System.out.println(set);
9
10
11 //2. 创建一个比较器
12 Set<Student2> treeSet = new TreeSet<Student2>(
13 new Comparator<Student2>(){
14 public int compare(Student2 s1, Student2 s2){
15 return s1.getAge()-s2.getAge();
16 }
17 }
18 );
19 treeSet.add(new Student2("xiaoming", 20));
20 treeSet.add(new Student2("xiaoqiang", 21));
21 treeSet.add(new Student2("xiaohong", 19));
22 System.out.println(treeSet);
23 }
24 }
25 //1. 集合元素继承comparable,使自身具有比较性
26 class Student implements Comparable<Student>{
27 private String name;
28 private int age;
29 Student(String name, int age){
30 this.name = name;
31 this.age = age;
32 }
33 //该方法在TreeSet底层被调用,用来比较对象的大小从而进行排序。
34 @Override
35 public int compareTo(Student s){
36 return this.age-s.age; //按age升序排序
37 }
38
39 @Override
40 public String toString(){
41 return this.name + "-" + this.age;
42 }
43 }
44
45 class Student2 {
46 private String name;
47 private int age;
48 Student2(String name, int age){
49 this.name = name;
50 this.age = age;
51 }
52 public int getAge(){
53 return this.age;
54 }
55 @Override
56 public String toString(){
57 return this.name + "-" + this.age;
58 }
59 }
2. Map接口

代码演示
1 Map<String, String> map = new HashMap<String, String>();
2 //判断是否为空 isEmpty()
3 if(map.isEmpty()){
4 System.out.println("集合为空!");
5 }
6
7 //添加键值对 put(k, v)
8 map.put("百度", "www.baidu.com");
9
10 //获取map的长度 size()
11 int size = map.size();
12
13 Map<String, String> map2 = new HashMap<String, String>();
14 map2.put("腾讯", "www.qq.com");
15 map2.put("阿里巴巴", "www.taobao.com");
16 //添加map putAll(map)
17 map.putAll(map2);
18 System.out.println(map);
19
20 //判断是否包含key值 containsKey(key)
21 if(map.containsKey("百度")){
22 System.out.println("百度exist");
23 }
24 //判断是否包含value值 containsValue(value)
25 if(map.containsValue("www.qq.com")){
26 System.out.println("www.qq.com exist");
27 }
28
29 //获取map的全部key值 keySet()
30 Set<String> keySet = map.keySet();
31 System.out.println(keySet);
32 //获取map的全部value值 values()
33 Collection<String> c = map.values();
34 System.out.println(c);
35
36 //根据key值获取value值 get(k)
37 String baiduSite = map.get("百度");
38 System.out.println(baiduSite);
39
40 //遍历1
41 Set<Map.Entry<String, String>> entrySet = map.entrySet();
42 Iterator<Map.Entry<String, String>> it = entrySet.iterator();
43 while(it.hasNext()){
44 Map.Entry<String, String> me = it.next();
45 String key = me.getKey();
46 String value = me.getValue();
47 System.out.println(key + ":" + value);
48 }
49
50 //遍历2
51 for(String k : keySet){
52 String value = map.get(k);
53 System.out.println(k + "=" + value);
54 }
8. HashMap和TreeMap
【Java基础总结】集合框架的更多相关文章
- Java基础--说集合框架
版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...
- 黑马程序员——【Java基础】——集合框架
---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
- Thinking in java基础之集合框架(转载)
集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ...
- Java基础之集合框架(Collection接口和List接口)
首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关 ...
- java基础之集合框架
6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ...
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)
控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...
- Java基础之集合框架类及泛型简介
Collection接口 Collection 通用的常见方法 add()添加一个元素,可以指定脚标 addAll()将一个collection放入 clear()清除 remove()删除元素,返回 ...
- java基础之集合框架--使用ArrayList类动态 存储数据
一.ArrayList是List接口下的一个实现类,实现了长度可变的.连续的数组:拥有数组的特性. 遵循了LIst的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ...
随机推荐
- 在Python工具箱中,创建对应子工具集
目录 问题描述 实现方法 问题描述 在Pro中,新建自定义工具箱后,直接通过操作可以添加工具集. 但是新建python工具箱后,却没有新建的操作.因为python工具箱的对象定义,都是在脚本中定义的, ...
- OS之《CPU调度》
CPU调度层次 高级调度:是作业调度.将外村的作业加载到内存里,分配对应的资源,然后加入就绪队列 低级调度:将就绪队列中的进程调度到CPU执行 中级调度:为了提高内存的利用率和系统的吞吐量,将暂时不能 ...
- 用word发博客
测试 标题一 第一段文字 测试图片 标题二 Test test
- Centos查找Tomcat路径并重启
[root@devrestcloud ~\]# find / -name \*tomcat\* [root@devrestcloud ~]# cd /usr/tomcat/apache-tomcat- ...
- HTML 面试题
.code { background-color: rgba(246, 246, 246, 1); color: rgba(232, 62, 140, 1) } DOCTYPE的作用? DOCTYPE ...
- Microsoft.Extensions.ServiceDiscovery 的 Consul 实现
GitHub地址:https://github.com/vipwan/Biwen.Microsoft.Extensions.ServiceDiscovery.Consul 使用方式 添加 NuGet ...
- .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门
.NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门 原文地址:https://devblogs.microsoft.com/dotnet/introducing-aspn ...
- 人工智能应用的“繁花时代”,各大企业何以破局AI模型挑战
AI技术的崛起,为各行业发展带来巨大变革和超强的创新潜力.然而,各大企业在拥抱AI的进程中并非一路坦途,"繁花盛开"的背后隐藏着AI模型生产与管理环节的诸多痛点. 先来看看部分 ...
- 比较IDEA与Eclipse
在IDEA的项目中,聚合工程或普通的根目录是工程(Project).它的每一个子模块(Module),都可以使用独立的JDK和Maven.下面的子工程称为模块(Module),子模块(Module)之 ...
- 微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等
本文由微信客户端技术团队工程师"Jon"分享,原题"Windows微信:消息数据库架构演进",有较多修订. 1.引言 本文分享的是,微信客户端团队基于对微信用户 ...