bootstrap 集合移除key_(六)集合

5.List集合

(1)介绍常用方法

java.util.List接口 extends Collection接口

List接口的特点:

1>有序的集合,存储元素和取出元素的顺序是一致的(存储123取出123)

2>有索引,包含了一些带索引的方法

3>允许存储重复的元素

List接口中带索引的方法(特有):

-public voidadd(int index,E element):将指定的元素,添加到该集合中的指定位置上

-public E get(intindex):返回集合中指定位置的元素

-public Eremove(int index):移除列表中指定位置的元素,返回的是被移除的元素

-public E set(intindex,E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素

注意:

操作索引的时候,一定要防止索引越界异常。

d1c86961a8360e0d91000c46f61d2988.png

(2)ArrayList集合

java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能是查询数据,遍历数据,所以ArrayList是最常用的集合。

(3)LinkedList集合

java.util.LinkedList集合implements List接口

LinkedList集合的特点:

       1>底层是一个链表结构:查询慢,增删快

       2>里边包含了大量的操作首尾元素的方法

注意:使用LinkedList集合特有的方法,不能使用多态

-public void addFirst(E e):将指定元素插入到此列表的开头

-public void addLast(E e):将指定元素插入到此列表的结尾(此方法等效于add();)

-public void push(E e):将元素推入此列表所表示的堆栈

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

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

3e3b3c4049a59b40e14dd2158c923c8c.png

-public E removeFirst():移除并返回此列表的第一个元素

-public E removeLast():移除并返回此列表的最后一个元素

-public E pop():从此列表所表示的堆栈处弹出一个元素

-public boolean isEmpty():如果列表不包含元素,则返回true

(4)Vector集合(了解)

Vector类可以实现可增长的对象数组。与新collection实现不同,Vector是同步的,也就是单线程。

-void addElement(E obj):将指定的组件添加到此向量的末尾,将其大小增加1。相当于add方法。

遍历时使用的方法:

Enumeration elements():返回此向量的组件的枚举。

Enumeration中有两个方法:

boolean hasMoreElements():测试此枚举是否包含更多的方法(相当于hasNext()方法)

nextElement():如果此枚举至少还有一个可提供的元素,则返回此枚举的下一个元素(相当于next()方法)

6.Set集合

(1)HashSet集合介绍

java.util.Set接口extends Collection接口

Set接口的特点:

1>不允许存储重复的元素

2>没有索引,没有带索引的方法,也不能使用普通的for循环遍历

Java.util.HashSet集合implements Set接口

HashSet特点:

1>不允许存储重复的元素

2>没有索引,没有带索引的方法,也不能使用普通的for循环遍历

3>是一个无序的集合,存储元素和取出元素的顺序有可能不一致

4>底层是一个哈希表结构(查询的速度非常快)

17d1501996797c7f7ad41c68c3c900ac.png

(2)哈希值

哈希值是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址)

在Object类中有一个方法,可以获取对象的哈希值。

int hashCode() 返回该对象的哈希码值

hashCode方法的源码:

 public native inthashCode();

native:代表该方法调用的是本地操作系统的方法。

toString方法的源码:

return getClass().getName() + “@” +Integer.toHexString(hashCode());

String类的哈希值

       String类重写Object类的hashCode方法

98be61e75767f3fb7afc4ea6532eb250.png

可以重写hashCode方法。

(3)HashSet集合存储数据的结构

79eb178e75b3329342976569f9d5545d.png

(4)Set集合存储元素不重复的原理

385562fa9a1735d612b6d218221ce556.png

(5)HashSet存储自定义类型元素

ea4c6dbd411079f1bb9c5ccf5132dc61.png

79a7161a6a760efd20cf454532a4f34b.png

(6)LinkedHashSet集合

java.util.LinkedHashSet集合 extends HashSet集合

LinkedHashSet集合特点:

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

37fc1926fffbe27b5286b63d77ee51ac.png

(7)可变参数

可变参数:是JDK1.5之后出现的新特性

使用前提:

   当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数。

使用格式:定义方法时使用

   修饰符 返回值类型 方法名(数据类型…变量名){}

可变参数的原理:

   可变参数的底层就是一个数组,根据传递参数的个数的不同,会创建不同长度的数组,来存储这些参数传递的参数的个数,可以是0个(不传递参数),1,2…多个

可变参数的注意事项:

   1>一个方法参数列表,只能有一个可变参数

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

可变参数的特殊(终极)写法

public static voidmethod(Object…obj){}

7.Collections工具类

(1)Collections集合工具类的方法

-java.util.Collections是集合工具类,用来对集合进行操作,部分方法如下:

       -public static BooleanaddAll(Collection c,T…elements):往集合中添加一些元素

       -public static void shuffle(List>list):打乱顺序,打乱集合顺序

       -public static voidsort(List list):将集合中元素按照默认规则排序

注意:

sort(List list)使用前提:

       被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法CompareTo定义排序的规则

Comparable接口的排序规则:

       自己(this)- 参数:升序

       参数– 自己(this):降序

b7974f41fed9af37d4488b996ac36da3.png

-public static void sort(List list, Comparator super T>):将集合元素按照指定规则进行排序

Comparable 和Comparator的区别:

Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法

Comparator:相当于找一个第三方裁判,比较两个

Comparator的排序规则:

 o1-o2:升序

 o2-o1:降序

2ebed7084d9036c510f44ef5e74ad654.png

8.Map集合

(1)Map集合概述

java.util.Map集合

Map集合的特点:

       1>Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)

       2>Map集合中的元素,key和value的数据类型可以相同也可以不同

       3>Map集合中的元素,key是不允许重复的,value是可以重复的

       4>Map集合中的元素,key和value是一一对应的

(2)Map常用子类

java.util.HashMap集合 implements Map接口

HashMap集合的特点:

1>HashMap集合的底层是哈希表:查询的速度非常快

       JDK1.8之前:数组+单向链表

       JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8):提高查询的速度

2>HashMap集合是一个无序的集合,存储元素和取出元素的顺序又可能不一致

java.util.LinkedHashMap集合 extends HashMap集合

LinkedHashMap的特点:

       1>LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)

       2>LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的

(3)Map接口中的常用方法

-public V put(Kkey, V value):把指定的键与指定的值添加到Map集合中

返回值:V

       存储键值对的时候,key不重复,返回值V是null

       存储键值对的时候,key重复,会使用新的value替换Map中重复的value,返回被替换的value值

05f24bd920178fe4b6be7d5a78597b9e.png

-public Vremove(Object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值

返回值:V

       key存在,V返回被删除的值

       key不存在,V返回null

a499d6b08a0905e01cab40c34f12e595.png

-public Vget(Object key)  根据指定的键,在Map集合中获取对应的值

返回值:

       key存在,返回对应的value值

       key不存在,返回null

ad8304589b1b1e5fbaadedcfa11fae25.png

-boolean containKey(Objectkey) 判断集合中是否包含指定的键

包含返回true,不包含返回false

ff648d354cbc5b400b5ce807c338ee12.png

(4)Map集合遍历键找值方式

e0cda9691837071c2bdb2700ed02f086.png

Map集合的第一种遍历方式:通过键找值的方式

Map集合中的方法:

       Set keyset() 返回此映射中包含的键的Set视图

实现步骤:

       1>使用Map集合中的方法keySet(),把Map集合中的所有的key取出来,存储到一个Set集合中

       2>遍历set集合,获取Map集合中的每一个key

       3>通过Map集合中的get(key),通过key找到value

6a2c94f3d9b8ab9e4543a50591b0d12a.png

(5)Entry键值对对象

Map.Entry:在Map接口中有一个内部接口Entry

作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)-->结婚证

b75571cc2dbdd5c00ba2dd85bd44433f.png

(6)Map集合遍历键值对方式

Map集合遍历的第二种方式:使用Entry对象遍历

Map集合中的方法

Set>entrySet() 返回此映射中包含的映射关系的Set视图

实现步骤:

       1>使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中

       2>遍历Set集合,获取每一个Entry对象

3>使用Entry对象中的方法getKey()和getValue()获取键与值

441ccd6d993749f9ebcc991f755d22af.png

(7)HashMap存储自定义类型键值

Map集合保证key是唯一的:

       作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一

HashMap存储自定义类型键值

key:String类型

       String类重写了hashCode方法和equals方法,可以保证key值的唯一

value:Person类型

       value可以重复(同名同年龄的人视为一个人)

4aa7f60525a244a2578a3f72198cf85e.png

HashMap存储自定义类型键值

key:Person类型

       Person类必须重写hashCode方法和equals方法,可以保证key值的唯一

value:String类型

       value可以重复

26d0fa48a0da467f1f36a0358468bcf9.png

59200f1a630c1466565f17d0cc1745ba.png

(8)LinkedHashMap集合

-java.util.LinkedHashMapextends HashMap

Map接口的哈希表和链接列表实现,具有可预知的迭代顺序

底层原理:

哈希表+链表(记录元素的顺序)

5ab5a65fb017c4f5170bc903c283e026.png

(9)Hashtable集合

-java.util.Hashtable集合 implements Map接口

Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢

HashMap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快

HashMap集合(之前学过的所有集合):可以存储null值,null键

Hashtable集合,不能存储null值,null键

Hashtable和Vector集合一样,在JDK1.2版本之后被更先进的集合(HashMap和ArrayList)取代了

Hashtable的子类Properties依然活跃

Properties集合是一个唯一和IO流相结合的集合

ab9f3bba819f97622e2ad7c6baa369b3.png

(10)练习_计算一个字符串中每个字符出现的次数

bcbc553e49e17e287fe71ce5d8a8cff3.png

练习:计算一个字符串中的每个字符出现的次数

分析:

1>使用Scanner获取用户输入的字符串

2>创建Map集合,key是字符串中的字符,value是字符的个数

3>遍历字符串,获取每一个字符

4>使用获取到的字符,去Map集合判断key是否存在

       key存在:

              通过字符(key),获取value(字符个数)

              value++

              put(key,value)把新的value存储到Map集合中

       key不存在:

              put(key,1)

5>遍历Map集合,输出结果

154f29d56edd6839c5db6dd89e9b0685.png

(11)JDK9对集合添加的优化_of方法

JDK9的新特性:

       List接口,Set接口,Map接口:里面增加了一个静态方法of,可以给集合一次性添加多个元素

static List of (E…elements)

使用前提:

当集合中存储的元素个数已经确定了,不在改变时使用

注意:

1>of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类

2>of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常

3>Set接口和Map接口在调用方法的时候,不能有重复的元素,否则会抛出异常

d0e1875c9d1a8772151015d3581d504b.png

9.Debug调试

(1)Debug追踪

Debug调试程序:

可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug

使用方式:

       在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到哪里)

       右键选择Debug执行程序

       程序就会停留在添加的第一个断点处

执行程序:

       F8:逐行执行程序

       F7:进入到方法中

       Shift+F8:跳出方法

       F9:跳到下一个断点,如果没有下一个断点,那么就结束程序

       Ctrl+F2:退出Debug模式,停止程序

       Console:切换到控制台

10.斗地主案例(双列)

(1)斗地主案例的需求分析

fbeba48281a6db994ce02c1475a3816f.png

(2)斗地主案例的代码实现

838c49b7037f8f6c0935cd079ca2c8de.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值