集合和数组的区别

  集合只存储对象,长度是可变的;

  数组既可以存储基本数据类型,又可以存储对象,但长度是固定的。

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);

ArrayListLinkedList: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个实现类,HashSetTreeSet

其中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基础总结】集合框架的更多相关文章

  1. Java基础--说集合框架

    版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...

  2. 黑马程序员——【Java基础】——集合框架

    ---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...

  3. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

  4. Thinking in java基础之集合框架(转载)

    集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ...

  5. Java基础之集合框架(Collection接口和List接口)

    首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关 ...

  6. java基础之集合框架

    6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ...

  7. Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)

    控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...

  8. Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)

    控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...

  9. Java基础之集合框架类及泛型简介

    Collection接口 Collection 通用的常见方法 add()添加一个元素,可以指定脚标 addAll()将一个collection放入 clear()清除 remove()删除元素,返回 ...

  10. java基础之集合框架--使用ArrayList类动态 存储数据

    一.ArrayList是List接口下的一个实现类,实现了长度可变的.连续的数组:拥有数组的特性. 遵循了LIst的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ...

随机推荐

  1. python之在线书籍

    人生苦短,我用python, 这里罗列一些可以查看python电子书的相关链接,平时没事多看看,一定会大有裨益!!! python3-cookbook[https://python3-cookbook ...

  2. Python 学习记录(2)

    NumPy数组规整 对数组进行各种变化 转换数组形状 import numpy as np a=np.arange(1,6+1) b=np.reshape(a,(2,3)) print(a) prin ...

  3. Three.js案例-360全景房看

    在 360° 看房功能中,我们需要在浏览器中创建一个类似虚拟现实的场景,使得用户能够查看环境的每一个角落.这一功能的实现本质上是利用 球体映射技术,即通过将全景图作为纹理贴图映射到一个反向的球体上,用 ...

  4. openEuler欧拉配置MySQL8的MGR单主双从

    ​一. 系统优化(三个节点全部操作) 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭selinux echo "S ...

  5. 1.mysql部署文档

    部署方式 1.docker上面部署 ● 部署最新版本 docker pull mysql:latest # 拉取最新版本的镜像文件 docker images # 查看已经安装的镜像文件 docker ...

  6. 【转载】 《SpringBoot2.0 实战》系列-集成Quartz定时任务(持久化到数据库)

    https://blog.csdn.net/HXNLYW/article/details/95055601 一.增加依赖 我们使用的spring-boot-starter-quartz,所以不用显示指 ...

  7. mac 安装mysql详细教程(安装包方式)

    一:下载最新的MySQL社区版 为了安装更方便,建议下载dmg安装包.最新的版本是5.7.20.   MySQL 二:安装MySQL 双击 mysql-5.7.20-macos10.12-x86_64 ...

  8. debian 安装后需做的几件事

    debian 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络刚安装好的debian系统中,/etc/apt/sources ...

  9. Windows7下关闭和打开IPV6隧道

    IPv6隧道是将IPv6报文封装在IPv4报文中,让IPv6数据包穿过IPv4网络进行通信.对于采用隧道技术的设备来说,在隧道的入口处,将IPv6的数据报封装进IPv4,IPv4报文的源地址和目的地址 ...

  10. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v10.0版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...