【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的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ...
随机推荐
- nginx之日志
1)耗时问题定位 这几天在优化服务器的响应时间,在根据 nginx 的 accesslog 中 requesttime进行程序优化时,发现有个接口,直接返回数据,平均的requesttime进行程序优 ...
- OS开发笔记(1)——硬盘引导的尝试
看前提醒:这一系列笔记完全是按照我的思考顺序写的,中间可能会绕弯路 定义 为了避免概念的混淆,我先在这里作一下(仅适用于本文的)名词的解释: 引导程序/boot程序:特指磁盘MBR或者VBR扇区中存放 ...
- Input报错“Form elements must have labels: Element has no title attribute Element has no placeholde”
喵~ 项目开发难免会遇到些不解的问题,以下总结的是简化版,重在复现问题,解决问题. 写表单时,如果只是单独写了input元素,发现在后台管理会飘红.感觉很奇怪,明明没有写错语法,为什么会飘红呢? 1. ...
- redis 使用lua 生成流水号
在实际的业务场景中,我们会用到流水号. 之前的流水号做法是,使用redis的全局锁.然后对数据库进行更新,数据库更新 这个也会有一些问题,比如对于同一个流水号,多个线程去更新,由于事务比较长,那么就会 ...
- 试了下Cursor,感觉程序员工种危险了
大家好,我是汤师爷~ 今年8月份,AI 编程工具 Cursor 在开发者社区彻底火了.在 Twitter 平台上,Cloudflare 副总裁分享了一段视频,展示了一个令人震惊的案例.他年仅 8 岁的 ...
- 如何在 Epicor 中计算绩效
制造性能是任何生产工序的关键,允许企业衡量和评估其效率和生产力水平. 我们将探讨如何在 Epicor 中计算制造性能.计算整体设备效率(OEE) 时性能指标的价值.如何解释制造指标以及在 Epicor ...
- uni-app在微信小程序端自定义组件中样式穿透失效
前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app. 坑位 最近因UI有别 ...
- 腾讯技术岗位笔试&面试题(四)
说在前面 本篇文章是腾讯技术面试题目汇总第四篇. 后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析. 欢迎大家点赞关注转发. 原文链接:https://mp.we ...
- Docker跨主机跨服务器迁移
主要作用: 就是让配置好的容器,可以得到复用,后面用到得的时候就不需要重新配置. 其中涉及到的命令有: docker commit 将容器保存为镜像 docker save -o 将镜像备份为tar ...
- 【Amadeus原创】docker中修改wordpress上传文件大小
1,进入docker 2,cp php.ini 3, cd到目录 [root@3 ~]# docker exec -it wordpress /bin/bash root@1d8a4fbdaa6b ...