JavaSE基础知识分享(七)
写在前面
前面讲的是面向对象中的常用类部分,下面让我们来看看java中集合这部分的内容!在本文的最后给大家发一个题目,便于复习Java面向对象部分的知识!
集合
数据结构
-
栈和队列
-
数组和链表
-
树
-
哈希表
-
图
本部分知识太多,就不一一列举了。
了解更多
泛型
-
泛型类
格式:public class 类名<泛型类型1,…>
注意:泛型类型必须是引用类型。 -
泛型方法
格式:public <泛型类型> 返回类型 方法名(泛型类型 参数)
-
泛型接口
格式:public interface 接口名<泛型类型1,…>
-
泛型通配符
<?>
<?>
任意类型,若没有明确,就是Object
及任意 Java 类。<? extends E>
向下限定,E 及其子类。<? super E>
向上限定,E 及其父类。
两大继承体系
Collection 接口
-
成员方法
-
boolean add(E e)
- 作用:将指定的元素
e
添加到集合中。如果集合中尚不存在该元素,成功添加返回true
;如果集合中已经存在该元素,则返回false
。 - 返回值:
true
如果元素成功添加,false
如果元素已存在。
- 作用:将指定的元素
-
boolean remove(Object o)
- 作用:从集合中移除指定的元素
o
。如果集合中存在该元素,移除成功返回true
;如果集合中不存在该元素,则返回false
。 - 返回值:
true
如果元素成功移除,false
如果元素不存在。
- 作用:从集合中移除指定的元素
-
void clear()
- 作用:移除集合中的所有元素,使集合变为空。
- 返回值:无返回值。
-
boolean contains(Object o)
- 作用:检查集合是否包含指定的元素
o
。如果集合中存在该元素,则返回true
;否则返回false
。 - 返回值:
true
如果集合包含指定的元素;false
如果集合不包含该元素。
- 作用:检查集合是否包含指定的元素
-
boolean isEmpty()
- 作用:检查集合是否为空。如果集合中没有任何元素,则返回
true
;否则返回false
。 - 返回值:
true
如果集合为空;false
如果集合包含元素。
- 作用:检查集合是否为空。如果集合中没有任何元素,则返回
-
int size()
- 作用:返回集合中元素的数量。
- 返回值:集合中元素的数量(一个整数)。
-
Object[] toArray()
- 作用:返回包含集合中所有元素的数组。数组的类型为
Object[]
。 - 返回值:包含集合中所有元素的数组。
- 作用:返回包含集合中所有元素的数组。数组的类型为
-
<T> T[] toArray(T[] a)
- 作用:返回包含集合中所有元素的数组。如果提供的数组
a
足够大,元素将被存储在该数组中;否则,创建一个新的数组来存储元素。 - 返回值:包含集合中所有元素的数组。如果提供的数组
a
足够大,则返回a
;否则返回新创建的数组。
- 作用:返回包含集合中所有元素的数组。如果提供的数组
-
Iterator<E> iterator()
- 作用:返回集合中元素的迭代器,可以通过迭代器遍历集合中的元素。
- 返回值:集合中元素的
Iterator
。
-
boolean containsAll(Collection<?> c)
- 作用:检查集合是否包含指定集合
c
中的所有元素。如果集合中包含c
中的所有元素,则返回true
;否则返回false
。 - 返回值:
true
如果集合包含所有c
中的元素;false
如果不包含。
- 作用:检查集合是否包含指定集合
-
boolean addAll(Collection<? extends E> c)
- 作用:将指定集合
c
中的所有元素添加到当前集合中。如果当前集合由于添加而发生了变化,则返回true
;否则返回false
。 - 返回值:
true
如果集合发生变化;false
如果集合未发生变化。
- 作用:将指定集合
-
boolean removeAll(Collection<?> c)
- 作用:从当前集合中移除指定集合
c
中的所有元素。如果当前集合由于移除而发生了变化,则返回true
;否则返回false
。 - 返回值:
true
如果集合发生变化;false
如果集合未发生变化。
- 作用:从当前集合中移除指定集合
-
boolean retainAll(Collection<?> c)
- 作用:保留当前集合中与指定集合
c
中的元素相同的元素,移除所有其他元素。如果当前集合由于移除而发生了变化,则返回true
;否则返回false
。 - 返回值:
true
如果集合发生变化;false
如果集合未发生变化。
- 作用:保留当前集合中与指定集合
-
子接口
-
List
接口- 特点:元素有序且可以重复,有索引下标。
- 子类
-
ArrayList
- 底层数据结构:数组
- 优点:查询快
- 缺点:增删慢,线程不安全
- 线程安全实现:使用泛型和
synchronized
关键字修饰类。
-
Vector
- 底层数据结构:数组
- 优点:线程安全
- 缺点:效率低
-
LinkedList
- 底层数据结构:双链表
- 优点:增删快
- 缺点:查询慢,线程不安全
-
-
Set
接口- 特点:元素唯一且无序。
- 子类
-
HashSet
- 底层数据结构:哈希表
- 元素唯一性:通过
hashCode()
和equals()
实现。
-
LinkedHashSet
- 底层数据结构:哈希表和双链表
- 优点:哈希表保证元素唯一性,双链表保证元素有序。
-
TreeSet
- 底层数据结构:红黑树
- 排序方式:
- 自然排序:元素类实现
Comparable<元素类>
接口并重写compareTo
方法。 - 比较器排序:使用实现了
Comparator
接口且重写compare
方法的对象进行排序。
- 自然排序:元素类实现
-
-
-
遍历方式
- 方式一:使用迭代器,利用
hasNext()
和next()
方法。 - 方式二:使用
for
循环,利用集合的size()
方法和get(索引值)
。 - 方式三:将集合转成数组,通过数组的
length
属性进行遍历。
- 方式一:使用迭代器,利用
Map 接口
-
成员方法
-
V put(K key, V value)
- 作用:将指定的键
key
和对应的值value
存入映射中。如果映射中已经存在该键,则用新值替换旧值,并返回旧值;如果映射中没有该键,则添加新键值对并返回null
。 - 返回值:旧值(如果键已存在),否则
null
。
- 作用:将指定的键
-
V remove(Object key)
- 作用:从映射中移除指定的键
key
及其对应的值。如果键存在,则将其对应的值移除并返回;如果键不存在,则返回null
。 - 返回值:被移除的值(如果键存在),否则
null
。
- 作用:从映射中移除指定的键
-
void clear()
- 作用:移除映射中的所有键值对,使映射变为空。
- 返回值:无返回值。
-
boolean containsKey(Object key)
- 作用:检查映射是否包含指定的键
key
。如果映射中存在该键,则返回true
;否则返回false
。 - 返回值:
true
如果映射包含指定的键;false
如果映射不包含该键。
- 作用:检查映射是否包含指定的键
-
boolean containsValue(Object value)
- 作用:检查映射是否包含指定的值
value
。如果映射中存在该值,则返回true
;否则返回false
。 - 返回值:
true
如果映射包含指定的值;false
如果映射不包含该值。
- 作用:检查映射是否包含指定的值
-
boolean isEmpty()
- 作用:检查映射是否为空。如果映射中没有任何键值对,则返回
true
;否则返回false
。 - 返回值:
true
如果映射为空;false
如果映射包含键值对。
- 作用:检查映射是否为空。如果映射中没有任何键值对,则返回
-
int size()
- 作用:返回映射中键值对的数量。
- 返回值:映射中键值对的数量(一个整数)。
-
V get(Object key)
- 作用:获取指定键
key
对应的值。如果映射中存在该键,则返回其对应的值;如果键不存在,则返回null
。 - 返回值:指定键对应的值(如果键存在),否则
null
。
- 作用:获取指定键
-
Set<K> keySet()
- 作用:返回映射中所有键的集合(
Set
)。可以通过这个集合遍历所有的键。 - 返回值:包含映射中所有键的
Set
。
- 作用:返回映射中所有键的集合(
-
Collection<V> values()
- 作用:返回映射中所有值的集合(
Collection
)。可以通过这个集合遍历所有的值。 - 返回值:包含映射中所有值的
Collection
。
- 作用:返回映射中所有值的集合(
-
Set<Map.Entry<K, V>> entrySet()
- 作用:返回映射中所有键值对的集合(
Set
)。每个键值对都表示为Map.Entry
对象,方便进行遍历和操作。 - 返回值:包含映射中所有键值对的
Set
。每个键值对是Map.Entry<K, V>
对象。
- 作用:返回映射中所有键值对的集合(
-
遍历方式
- 方式一:获取所有键的集合,遍历键集合,根据键获取值。
- 方式二:获取所有键值对对象的集合,遍历集合,根据键值对对象获取键和值。
-
子类
-
HashMap
- 底层数据结构:哈希表
-
LinkedHashMap
- 底层数据结构:哈希表和链表
-
TreeMap
- 底层数据结构:红黑树
-
面向对象的复习题:
1.一个类的4.0写法:
创建一个`Person`类,包含`name`、`age`和`gender`三个私有字段。编写一个构造方法,用于初始化这些字段,外界要能读写每个字段,并提供一个公共的`toString`方法,用于打印`Person`对象的详细信息。
2.封装与访问控制:修改`Person`类,使其`age`字段只能被增加,不能被减少。为此,你需要提供一个公共的`increaseAge`方法,并在该方法中增加`age`字段的值。在`Person`类中添加一个私有方法,用于验证`age`字段的值是否合法(例如,年龄不能为负数)。在构造方法和`increaseAge`方法中调用该方法以确保对象状态的有效性。
3.继承:创建一个`Student`类,继承自`Person`类。在`Student`类中添加一个`studentId`字段和一个`getStudentId`方法。在`Student`类中重写`toString`方法,使其同时打印`Person`类的字段和`studentId`字段。
4.多态:在`Person`类中添加一个名为`speak`的抽象方法,该方法返回一个字符串,表示人物的说话内容。创建`Teacher`和`Student`两个类,分别继承自`Person`类,并实现`speak`方法。在`Teacher`类中,`speak`方法返回一条教育性的消息;在`Student`类中,`speak`方法返回一条学习的消息。编写一个`School`类,其中包含一个`Person`类型的数组。在`School`类中添加一个方法,该方法接收一个索引值,并调用数组中对应索引位置对象的`speak`方法,打印出说话内容。在`Person`类中写一个方法,表示该老师在备课。
5.接口:实现一个抽烟接口,给`Teacher`类加一个抽烟功能,写一个`smoking`方法内容是xxx正在吸烟,无返回值,并在4的基础上实现该接口来调用该方法。
效果展示: