本文章由公号【开发小鸽】发布!欢迎关注!!!

老规矩--妹妹镇楼:

一. 集合

(一) 定义

  集合是一种存储空间可变的存储模型,用于存取数据,优点是容量可变

(二) 集合类的体系结构

  集合分为单列集合和双列集合

  单列集合为Collection接口,又分为List和Set接口,List接口又分别用ArrayList类,LinkdedList类等等类实现接口。

  双列集合为Map接口,有HashMap类等等类实现Map接口。

二. Collection集合

(一) 定义

  上面说过,Collection集合是一个单列集合的顶层接口。它不提供具体的实现,而是用于传递集合,让更加具体的子接口如Set和List接口来实现。

(二) Collection集合的常用方法

  方法名                  说明

 boolean add(E e)            添加元素

 boolean remove(Object o)     从集合中移除指定的元素

 void clear()              清空集合中的元素

 boolean contains(Object o)    判断集合中是否存在指定的元素

  boolean isEmpty()         判断集合是否为空

  int size()           集合的长度,也就是集合中元素的个数

(三) 创建Collection对象

  用多态的方式,使用Collection的子接口的具体实现类来创建Collection对象

如:

Collection<String> c = new ArrayList<>();

(四) Collection的遍历

1. 迭代器

  集合可以使用迭代器进行遍历,如何得到迭代器呢?

通过iterator iterator()方法可以得到该集合的迭代器。

2. 遍历示例

public class IteratorDemo {public static void main(String[] args) {Collection<String> c = new ArrayList<>();//添加元素c.add("hello");c.add("world");//Iterator<E> iterator():返回此集合中元素的迭代器Iterator<String> it = c.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}}
}

三. List集合

(一) 定义

  List接口是Collection接口的子接口,可以使用Collection接口的功能,也有自己特有的功能。List集合称为有序集合,允许有重复的元素

  用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。

(二) List集合的特有方法

  方法名                   描述

  void add(int index,E element)  在此集合中的指定位置插入指定的元素

  E remove(int index)       删除指定索引处的元素,返回被删除的元素

  E set(int index,E element)    修改指定索引处的元素,返回被修改的元素

  E get(int index)         返回指定索引处的元素

(三) ListIterator

1. 定义

  List集合特有的迭代器,可以双向移动迭代器

2. 获取方法

  通过List集合的listIterator()方法得到。

3. 特有方法

(1)E previous()

  返回列表中的上一个元素

(2)Boolean hasPrevious()

  如果列表迭代器在相反方向遍历时有更多元素,返回true

(四) List集合的实现类

1. ArrayList集合

  底层实现是数组,数组的结构特点是查询块,增删慢。

2. LinkedList集合

  底层实现是链表,链表的特点是查询慢,增删快。

(五) LinkedList集合的特有方法

  由于LinkedList集合是链表实现,因此有链表的相关方法实现。

  方法名            说明

public void addFirst(E e)    在该列表开头插入指定的元素

public void addLast(E e)   将指定的元素追加到此列表的末尾

public E getFirst()       返回此列表中的第一个元素

public E getLast()       返回此列表中的最后一个元素

public E removeFirst()    从此列表中删除并返回第一个元素

public E removeLast()     从此列表中删除并返回最后一个元素

四. Set集合

(一) 定义

  Collection接口的子接口,元素存取无序,不能存储重复元素,没有索引,只能用迭代器或者增强for循环遍历。

(二) HashSet

1. 哈希值

(1)定义

  JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

(2)获取方法

  Object类中的public int hashCode():返回对象的哈希码值

(3)特点

同一对象的哈希值是相同的。

  一般不同对象的哈希值是不同的,但通过重写hashCode()方法,可以让不同对象的哈希值相同。

2. HashSet集合的特点

(1)底层的数据结构为哈希表

(2)存取顺序不相同

(3)不包含重复元素

3. 哈希表

  底层为数组+链表实现,存储链表的数组。将哈希值通过某种计算得出的数值结果相同的连成一个链表,存储在数组中。

4. HashSet集合保证元素唯一性原理

(1) 根据哈希值计算存储位置

  根据对象的哈希值计算存储位置,若该位置没有元素则直接存入

  若该位置有元素存在,则进入下一步。

(2) 比较哈希值

  比较已存在的元素的哈希值与当前元素的哈希值,若哈希值不同,则将当前元素存储,若相同则进入下一步。

(3) equals()方法比较两个元素的内容

  如果内容不同,则将当前元素存储,若相同,则不存储当前元素。

5. 注意事项

  HashSet要实现存储元素唯一性,则要重写存储元素对象类的equals()方法和hashCode()方法,通过idea的自动重写即可实现。

(三) LinkedHashSet集合

特点:

  哈希表和链表实现的Set集合,链表保证元素的有序,则元素的存取顺序相同;哈希表保证元素唯一。

(四) TreeSet集合

1. 定义

  TreeSet实现Comparable接口,该接口对于实现它的类的对象强加一个自然排序。同时TreeSet接口也实现了Comparator接口,该比较器可以对对象进行排序。

  使用自然排序还是比较器排序,由构造方法决定。

2. 特点

(1)元素按照一定规则排序,排序方式为自然排序或者规定的比较器

(2)不包含重复元素

(3)没有索引,不能用普通for循环遍历

3. Comparable自然排序的使用

  Comparable自然排序接口对于实现改接口的每个类对象都施加自然排序。因此,在使用Comparable接口的每个类都要implements该接口。

  该类实现Comparable接口时,要重写compareTo()方法该方法中如果返回0,则说明是重复元素,不添加;如果是正数,按照升序存储;如果是负数,按照降序存储。

4. compareTo()方法重写实例理解

(1)如果重写compareTo()方法如下所示,如何理解呢?

@override
public int compareTo(Student s){}int num = this.age – s.age;return num;
}

  理解:this理解为较大的元素,s理解为较小的元素;若返回this.age – s.age ,则按照升序存储,若返回 s.age – this.age ,则按照降序存储;若返回0,则不添加。

(2)重写compareTo()方法如下所示,如何理解?

@Override
public int compareTo(Student s){int num = this.age – s.age;int num2 = num==? this.name.compareTo(s.name) : num;return num2;
}

  理解:按照age升序排列,若age相同,则按照姓名的字母顺序排列。注意主要条件是age,次要条件是name。

5. 比较器Comparator的使用

  比较器Comparator需要在构造TreeSet时传入,Comparator也是一个接口,我们可以选择用实现类实现接口,也可以用匿名内部类的方式构造匿名对象。

  使用匿名内部类时,构建的是匿名类对象,如下所示:

TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>(){@OverridePublic int compare(Student s1, Student s2){Int num = s1.getAge() – s2.getAge();Int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;Return num2;}
});

  Comparator接口重写的是compare()方法,这里的s1代表着之前的this,这里的s2代表着之前的s。操作都是相同的,因此不过多介绍了。

五. Map集合

(一) 概述

  Map接口是双列集合接口,有键值和对应的值。

interface Map<K,V>  K:键的类型;V:值的类型

(二) 特点

  1. 键值对的映射关系
  2. 键值不能重复,但是值可以重复
  3. 一个键值对应一个值
  4. 元素的存取是无序的

(三) Map集合的使用

  注意Map是接口,那么要使用Map集合就要通过Map接口的实现类实现Map接口。

如:

Map<String, String> map = new HashMap<String, String>();

  Map接口用HashMap实现类创建对象。

(四) Map接口的常用方法

  方法名                说明

V put(K key,V value)           添加元素

V remove(Object key)        根据键删除键值对元素

void clear()             移除所有的键值对元素

boolean containsKey(Object key)   判断集合是否包含指定的键

boolean containsValue(Object value)  判断集合是否包含指定的值

boolean isEmpty()           判断集合是否为空

int size()             集合的长度,也就是集合中键值对的个数

V get(Object key)            根据键获取值

Set keySet()              获取所有键的集合

Collection values()           获取所有值的集合

Set> entrySet()          获取所有键值对对象的集合

(五) Map集合的遍历

1. 根据键值遍历

(1) 获取所有键值,用keySet()方法

(2) 遍历键值的集合,用增强for循环实现

(3) 根据键值找对应的值

2. 根据键值对遍历

(1) 获取所有键值对集合, Set> entrySet()

(2) 遍历键值对,获取键值和对应的值

六. Collections集合工具类

(一)定义

  Collections类是一个工具类,作用于集合。工具类中的成员方法都是private,因此需要用类名直接调用。

如:

Collections.sort()

(二)常用方法

  方法名                  说明   

public static void sort(List list)     将指定的列表按升序排序

public static void reverse(List<?> list)  反转指定列表中元素的顺序

public static void shuffle(List<?> list)  使用默认的随机源随机排列指定的列表

七. 增强for循环

(一) 定义

  学过了Iterator迭代器后,我们就需要会使用增强for循环。其内部原理是一个Iterator迭代器,所有实现了Iterable接口的类的对象都能够使用增强for循环。

(二) 格式

  for(元素数据类型 变量名 : 数组或者Collection集合){}

如:

Int[] arr = {1,2,3};
For(int I : arr)
{System.out.println(i);
}

传递集合对象_【Java学习笔记(九)】之集合的要点介绍相关推荐

  1. java学习笔记(十二)----集合

    集合类 集合类用于存储一组对象,其中的每个对象称之为元素,经常会用以的有Vector,Enumeration,ArrayList,Collection,Iterator,Set,List等集合和接口 ...

  2. java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间

    正文之前 终于好像仿佛看完了菜鸟教程的Java课程,感觉自己收获颇丰!很好,Java看完之后正愁如何开始进阶呢!结果发现菜鸟还准备了Java实例这种好东西!简直就是教程界的良心啊 !!!没事,先写写笔 ...

  3. 【Java学习笔记九】多线程

    程序:计算机指令的集合,它以文件的形式存储在磁盘上,是应用程序执行的蓝本. 进程:是一个程序在其自身的地址空间中的一次执行活动.进程是资源申请.调度和独立运行的单位,因此,它使用系统中的运行资源.而程 ...

  4. java学习笔记(九)----多线程

    class ThreadDemo1 { public static void main(String[] args)   { new TestThread().start(); //用start()默 ...

  5. JAVA学习笔记(九)- 初始化块与静态代码块

    初始化块 /** 初始化块* 初始化变量方式:声明时.构造函数.代码块* 使用static关键字修饰的代码块,称为静态代码块* * 执行顺序:静态代码块>代码块>构造方法* * 静态代码块 ...

  6. JAVA学习笔记(二十)- 集合 List

    ArrayList 集合 /** ArrayList,实现List接口* 声明数组时必须指定数组中元素的类型,可以是基本数据类型,也可以是引用数据类型* 声明集合时可以不指定其元素的类型,元素类型默认 ...

  7. android将彩图转为黑白_[Android学习笔记九] Android 开发中图片灰阶(黑白)显示...

    阅读本文之前关于将RGB颜色值转换为灰阶值的计算方法可参见: 灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图).总结一点就是更加一张原始图片来通过颜色的过滤 ...

  8. Java学习笔记:内部类/匿名内部类的全面介绍

    编写java程序时,一般一个类(或者接口)都是放在一个独立的java文件中,并且类名同文件名(如果类是public的,类名必须与文件名一致:非public得,无强制要求).如果想把多个java类放在一 ...

  9. 2022年Java学习笔记目录

    一.2022年Java任务驱动课程 任务驱动,统摄知识点:2022年Java程序设计讲课笔记 二.2022年Java学习笔记 (一)踏上Java开发之旅 Java学习笔记1.1.1 搭建Java开发环 ...

  10. Java学习笔记17:Java_Set集合_TreeSet集合_二叉树_HashSet集合

    文章目录 1.Set集合 1.1Set集合概述和特点[应用] 1.2Set集合的使用[应用] 2.TreeSet集合 2.1TreeSet集合概述和特点[应用] 2.2TreeSet集合基本使用[应用 ...

最新文章

  1. mysql性能优化分析 --- 上篇
  2. Matlab内置的矩阵反转函数
  3. Mac OS使用技巧十九:Safari碉堡功能之二查看网页源码
  4. 前端-html、css
  5. mysql lepus_MySQL 监控软件lepus天兔
  6. python怎么创建变量_Python之变量的创建过程
  7. mysql 只开放某个表_MySQL只恢复某个库或某张表
  8. javascript---不可靠的“undefined”
  9. jsp代码项目例子_【jav笔记】057天,jsp。
  10. Qt QMake详解
  11. PHP 实现敏感词过滤(附敏感词库)
  12. 小米手机miui12系统usb共享网络
  13. 程序员转行做什么工作比较好?
  14. 赴日本护师研修生项目介绍
  15. 【车辆计数】基于光流法实现车辆检测计数matlab 源码
  16. kafka | 生产者压缩算法面面观
  17. 读书感受 之 《AI·未来》
  18. 携自游家逐浪新能源汽车赛道的李一男不想被同代人抛下
  19. ARP是怎么工作的?ARP攻击与欺骗又是什么?
  20. 北航Sysweld学习者的升级打怪成长史

热门文章

  1. Centos 6 编译安装 Apache 2.4
  2. WinCE6.0下TCPMP的BenchMark汇总
  3. 关于营造团队良好氛围的讨论
  4. Windows下安装elastic search
  5. intellij idea 中右键项目没有git
  6. sql 练习网站答案解析
  7. 数据挖掘——统计学分析(一:数据的整理与图示表示)
  8. EXT.NET GridPanel默认选中多行
  9. bug管理工具之禅道的测试模块的使用
  10. LeetCode OJ:Linked List Cycle(链表循环)