Collection集合的总结以及如果选择适合的集合(包括对List和Set的对比)

1:Collection的关系图

2:Set集合(理解)

(1)Set集合的特点

无序,唯一

(2)HashSet集合(掌握)

A:底层数据结构是哈希表(是一个元素为链表的数组)

B:哈希表底层依赖两个方法:hashCode()和equals()

执行顺序:

首先比较哈希值是否相同

相同:继续执行equals()方法

返回true:元素重复了,不添加

返回false:直接把元素添加到集合

不同:就直接把元素添加到集合

C:如何保证元素唯一性的呢?

由hashCode()和equals()保证的,先调用hashCode()在调用equals()。

D:开发的时候,代码非常的简单,自动生成即可。

E:HashSet存储字符串并遍历

F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)

(3)TreeSet集合

A:底层数据结构是红黑树(是一个自平衡的二叉树)

B:保证元素的排序方式

a:自然排序(元素具备比较性)

让元素所属的类实现Comparable接口

b:比较器排序(集合具备比较性)

让集合构造方法接收Comparator的实现类对象

3:Collection集合总结(掌握)

Collection

|--List
有序,可重复

|--ArrayList

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高

|--Vector

底层数据结构是数组,查询快,增删慢。

线程安全,效率低

|--LinkedList

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高

|--Set
无序,唯一

|--HashSet

底层数据结构是哈希表。

如何保证元素唯一性的呢?

依赖两个方法:hashCode()和equals()

开发中自动生成这两个方法即可

|--LinkedHashSet

底层数据结构是链表和哈希表

由链表保证元素有序

由哈希表保证元素唯一

|--TreeSet

底层数据结构是红黑树。

如何保证元素排序的呢?

自然排序

比较器排序

如何保证元素唯一性的呢?

根据比较的返回值是否是0来决定

4:针对Collection集合我们到底使用谁呢?(掌握)

唯一吗?

是:Set

排序吗?

是:TreeSet

否:HashSet

如果你知道是Set,但是不知道是哪个Set,就用HashSet。

否:List

要安全吗?

是:Vector

否:ArrayList或者LinkedList

查询多:ArrayList

增删多:LinkedList

如果你知道是List,但是不知道是哪个List,就用ArrayList。

如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

如果你知道用集合,就用ArrayList。

5:在集合中常见的数据结构(掌握)

ArrayXxx:底层数据结构是数组,查询快,增删慢

LinkedXxx:底层数据结构是链表,查询慢,增删快

HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()

TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 21:48:59

Collection集合的总结以及如果选择适合的集合(包括对List和Set的对比)的相关文章

一、javaSE (十七)set集合、Collection集合、针对Collection集合我们到底使用谁、在集合中常见的数据结构

1:set集合(理解) (1)Set集合的特点 无序,唯一 (2) Hashset集合(掌握) A:底层数据结构是哈希表(是一个元素为链表的数组) B:哈希表底层依赖两个方法: hashCode()和equals() 执行顺序 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回fa1se:直接把元素添加到集合 不同:就直接把元素添加到集合 C:如何保证元素唯一性的呢? 由 hashcode()和equals()保证的 D:开发的时候,代码非常的简单

集合详解(五):集合嵌套与Collections工具类

一.集合嵌套 1.HashMap嵌套HashMap <span style="font-size:18px;"> /* * HashMap嵌套HashMap * * 传智播客 * jc 基础班 * 陈玉楼 20 * 高跃 22 * jy 就业班 * 李杰 21 * 曹石磊 23 * * 先存储元素,然后遍历元素 */ public void test3(){ // 创建集合对象 HashMap<String, HashMap<String, Integer>

Java基础——集合(二)——迭代器、Map集合

接上篇,<Java基础--集合(一)--集合体系和Collection> 四.迭代器的使用 使用步骤: 1.通过集合对象获取迭代器对象. 2.通过迭代器对象判断. 3.通过迭代器对象获取. 迭代器原理 由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同. 这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种集合的时候,只要该集合内部实现这个接口即可. 迭代器源码 public interface Iterator { publicabstract boolean

java基础33 Set集合下的HashSet集合和TreeSet集合

集合的体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合中的有序不是指自然顺序,而是指添加进去的顺序与出来的顺序是一致的------------------| ArrayList  ArrayList底层维护了一个object数组的实现的.(线程不安全),特点:查询速度快,增删速度慢.(有序,可重复)------------------| LinkedLi

自定义集合支持使用 foreach循环访问该集合

自定义集合支持使用 foreach循环访问该集合,需要实现 IEnumerable 和 IEnumerator 接口. using System;using System.Collections;public class Person{   public Person(string fName, string lName)   {      this.firstName = fName;      this.lastName = lName;   }   public string firstN

一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了

以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Demo { /** * @param args */ pu

集合系列开篇:为什么要学集合?

集合可以说是学习 Java 中最重要的一块知识点了,无论做任何业务系统,集合总是最为基础的那块 API.我第一次接触集合,是在我大三的时候,那时候去面试,面试官问我:你了解过集合吗?可惜那时候没什么项目经验,所以基本没有了解过,因此也错失了机会. 到了现在,我已经工作了5年了,也做过了大大小小十几个项目.这些项目中有简单的 SSH 项目,也有分布式高并发的复杂项目.无论在哪个项目中,关于集合的时候是必不可少的.但我现在慢慢回顾过去做的项目,我发现自己使用到的集合还是比较少,基本上只有:Array

集合框架中,引用数据类型对象集合的构建,易错点分析

先来个完整的效果代码:其目的创建5个学生对象,录入姓名与年龄的对象,并用集合将其遍历出来.易错点:1.如果不在学生对象中重写toString方法,那么在集合中就会出现,遍历出来后的arr{i}全部都是引用的对象地址,并不是对象.2.引用数据类型与基本数据类型最大的区别,引用数据类型要事先定义好各项属性与方法.要知道有参构造的作用是初始化方法里的属性.3.定义setname().getname().setage().getage()这四个方法,通过这四个方法来实现对name和age的操作.这样一来

java集合(3)-Java8新增的Predicate操作集合

Java8起为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将批量删除符合filter条件的所有元素.该方法需要一个Predicate(谓词)对象作为参数,Predicate也是函数式接口,因此可以使用Lambda表达式作为参数. package com.j1803.collectionOfIterator; import java.util.Collection; import java.util.HashSet; public class