数据结构

先进后出

栈.png

队列

先进先出

队列.png

数组

查询快 增删慢

链表

增删快  查询慢

红黑树

二叉树:分支不能超过两个 可以为一个

二叉树.png

接口

Iterable:迭代器模型
Collection:类集接口
List :继承了Collection,存储的数据有序且可重复
Set:继承了Collection,存储的数据无序且不可重复
Map:键值对映射表

Collection集合

集合概述

●集合:集合是java中提供的一种容器,可以用来存储多个数据。
 
集合和数组既然都是容器,它们有啥区别呢?
●数组的长度是固定的。集合的长度是可变的。
●数组申存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一
致。在开发中一般当对象多的时候,使用集合进行存储。

常用功能

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可
用于操作所有的单列集合。方法如下:
public boolean add(E e) :把给定的对象添加到当前集合中。//返回值一般为true 所以可以不用接收
public void clear() :清空集合中所有的元素。
public boolean remove(E e) :把给定的对象在当前集合中删除。//返回值是Boolean 集合中存在元素,删除元素返回true 反之返回false
public boolean contains(E e) :判断当前集合中是否包含给定的对象。
public boolean isEmpty() :判断当前集合是否为空。
public int size() :返回集合中元素的个数。
public Object[] toArray() :把集合中的元素,存储到数组中。

ArrayList

与数组的区别 :
            数组的长度不可以发生改变 而ArrayList的长度可以改变
            
对于ArrayList来说,有以恶搞尖括号<E>代表泛型
泛型:也就是装在集合当中的所有元素,全部都是统一的什么类型
注意:反省只能是引用类型们不能是基本类型

格式: ArrayList<String> list = new ArrayList<>()


注意事项:
对于ArrayList 集合来硕,直接打印得到的不是地址值,而是内容
如果内容为空,得到的是空的中括号:[]

常用操作

//向集合中添加数据需要通过add方法 
例:  list.add()
反例:list.add(100)  //错误写法,因为创建的时候尖括号泛型已经说了是字符串,添加元素就必须是字符串。 
//  通过索引获取元素
例:list.get(索引)//返回值为对应索引的元素
//从集合中删除元素
例:list.remove(索引)//返回值为被删除的元素
//获取集合的长度尺寸,也就是其中元素的个数
例:list.size()//返回值为元素的个数
    
    
    
    
//遍历集合
    
    for(int i = 0 ; i < list.size() ; i++ ){
        System.out.println( list.get( i ) )
    }

存储基本数据

如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的包装类
ArrayList<Integer> list = new ArrauList<>()
list.add(100);
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

LinkedLIst

ArrayList :底层操作的动态数组 // 查询快 增删慢
LinkedList:底层操作链表结构数据 //增删快  查询慢

Iterator 迭代器

迭代:即Collection集合元素的通用获取方式。在去元素之前要先判断集合中有没有元素,如果有,就把这个元素取出来再进行判断,如果还有就再取出来,一直把集合中所有的元素全部取出,这种取出方式叫做迭代。

Iterator 迭代器 是个接口,我们无法直接使用 需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection接口中有一个方法 叫做 iterator(),这个方法就是返回的迭代器的实现类对象。
    Iterotor<E> iterator() 返回在此collection 的元素上进行迭代的选代器。

迭代器的使用步骤

1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接受(多态)
    Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型
2.使用Iterator接口中的方法hasNext还有没有下一个元素
3.使用Iterator接口中的方法next取出集合中的下一个元素。

常用功能

hasNext()//判断集合中有没有下一个元素 如果有就返回ture  没有返回false
next()//取出集合中的下一个元素

Map

HashMap

HashMap<Key,Value> map = new HashMap<>();

//null可以作为 HashMap的key

常用功能

map.put("名字","数据"); //添加数据  当map里面key重复是 会覆盖原先的key。
map.get("Key")//获取数据
map.remove("key")//删除数据 返回值为删除的值
map.values  //返回map中所有key对应的value的值
map.replace("key","value") //替换

LinkedHashMap

set接口

1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历

HashSet

1.2. 基础set接口的特点
3.是一个无需的几个,存储元素和取出元素的顺序可能不一致
4.底层是一个哈希表结构(查询速度快)

遍历方法:
    使用迭代器
    使用增强for循环

常用功能

set.add();//添加元素

HashSet集合存储数据的结构

HashSet集合存储数据的结构.png

HashSet集合存储自定义类型元素

存储的元素(String,Integer......),必须重写HahCode方法和equals方法

LinkedHashCode

特点

底层是个哈希表(数组+链表/红黑树)+链表  多了一条链表(记录元素的存储顺序),确保元素有序。

有序但不允许重复(多了一层链表 存储顺序)

可变参数

可变参数:是JDK1.5之后出现的新特性
使用前提:
    当方法的参数列表类型已经确定,但是参数传递的个数不确定,就可以使用可变参数。
使用格式:
    修饰符 返回值类型 方法名(数据类型...变量名){}
可变参数原理:
     可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些传递的参数个数,可以是0个(不传递),也可以是多个。

注意事项

1.一个方法的参数列表,只能有一个可变参数
2.如果方法的参数有多个,那么可变参数必须写在参数列表的末尾

Collections集合工具类

java.utils.collections是集合工具类,用来对集合进行操作。部分方法如下:
 public static <T> boolean addAll(Collection<T> C, T... elements) :往集合中添加一些元素。
public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。
public static <T> void sort(list<T> list) ' :将集合中元素按照默认规则排序。
public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。

扩展资料

contains(obj)方法

1. List的contains(obj)方法

实际上,List调用contains(Object obj)方法时,会遍历List中的每一个元素,然后再调用每个元素的equals()方法去跟contains()方法中的参数进行比较,如果有一个元素的equals()方法返回true则contains()方法返回true,否则所有equals()方法都不返回true,则ontains()方法则返回false。因此,重写了Course类的equals()方法,否则,testListContains()方法的第二条输出为false。

2. Set的Contains(obj)方法
当调用HashSet的contains(Object obj)方法时,其实是先调用每个元素的hashCode()方法来返回哈希码,如果哈希码的值相等的情况下再调用equals(obj)方法去判断是否相等,只有在这两个方法所返回的值都相等的情况下,才判定这个HashSet包含某个元素。因此,需重写Course类的hashCode()方法和equals()方法。

Set集合不允许存储重复值的原理

Set集合在调用add方法的时候,add方法会调用元素的 hashCode方法和equals方法 判断元素是否重复

Set集合不允许存储重复值的原理.png

Last modification:September 15th, 2020 at 07:08 pm