集合和数组的区别

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

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

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. 一个关于CountDownLatch的并发需求

    需求 A,B,C可并发运行,全部成功才算成功,一个失败全员回滚. 思考 使用CountDownLatch,可以保证三个线程结束后,才进行提交成功状态.但是怎么才能判断某个任务失败了呢? 捕获子线程异常 ...

  2. 修改QScrollArea背景色透明,且不影响子控件,在Edit Style Sheet中修改

    在QScrollArea或者父控件中设置: QScrollArea{ background-color:transparent; } 在scrollAreaWidgetContents控件或者父控件中 ...

  3. 自定义资源支持:K8s Device Plugin 从原理到实现

    本文主要分析 k8s 中的 device-plugin 机制工作原理,并通过实现一个简单的 device-plugin 来加深理解. 1. 背景 默认情况下,k8s 中的 Pod 只能申请 CPU 和 ...

  4. IOS 越狱

    iOS越狱 palera1n palera1n工具支持iOS 15.0 - 16.4.1版本的越狱 支持设备,最高支持到A11芯片 iPhone 8.8P.X iPad 5 .6.7,iPad Pro ...

  5. JDK 18 最新动态和 JDK 19 新特性预测

    JDK 18 最新动态和 JDK 19 新特性预测_语言 & 开发_Michael Redlich_InfoQ精选文章 里面提到文章 定界延续(delimited continuations) ...

  6. kubectl cp

    简介 将文件.目录复制到容器:或从容器复制文件.目录. kubectl cp <file-spec-src> <file-spec-dest> 示例 # !!!重要提示!!! ...

  7. git同步远程仓库的所有分支

    git clone克隆远程仓库默认是只克隆master分支,当想把远程仓库上的所有的分支都克隆下来的话,有以下几种方法. 使用远程仓库github上的LSMLIB仓库为例.该仓库在github上一共有 ...

  8. 龙哥量化:代写技术指标,通达信ZIG函数优化改进之字转向,高点用最高价,低点用最低价

    如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 N:=50; A1:ZIG(3,N/10); 代码只有两行,参数是50,表示涨幅5%,在调参数时 ...

  9. C#/.NET/.NET Core技术前沿周刊 | 第 19 期(2024年12.23-12.29)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  10. 重温Go语法笔记 | 结构体

    结构体 多个任意类型聚合成的复合类型 1.字段拥有自己的类型和值 2.字段名必须唯一 3.字段可以是结构体 结构体的定义是一种内存布局的描述 只有实例化才会真正分配内存,必须实例化之后才能使用结构体的 ...