集合框架了解

1.Collecctions和Collection

Collection:集合框架中的用与存储一个一个元素的接口,又分为List和Set等子接口.

Collections:用于操作集合框架的一个工具类.此时的集合框架包括Set,List和Map

2.List接口

1.List接口的特点

用于存储有序的,可重复的数据--->"动态"数组

2.List接口中的常用方法:

①Collection中的方法

basic Operations

  1. boolean add(E e)

    • 在集合中加入特定的元素

    • Returns true if the collection was modified as a result.

  2. boolean addAll(Collection<? extends E> c)

    • 把一个指定集合的所有元素加入到集合中

    • Returns true if the collection was modified.

  3. void clear()

    • 移除集合内的所有元素

  4. boolean remove(Object o)

    • 移除一个指定元素

    • Returns true if the element was removed.

  5. boolean removeAll(Collection<?> c)

    • 移除所有在集合中存在的指定集合的元素

    • Returns true if the collection was modified.

  6. boolean retainAll(Collection<?> c)

    • 保存所有在集合中存在的指定集合的元素

    • 移除其他元素

    • Returns true if the collection was modified.


Query Operations

  1. boolean contains(Object o)

    • 查询集合中是否存在指定元素

    • Returns true if the element is present.

  2. boolean containsAll(Collection<?> c)

    • 查询集合中是否存在指定集合中的所有元素

    • Returns true if all elements are present.

  3. boolean isEmpty()

    • Checks if the collection is empty.

    • Returns true if it contains no elements.

  4. int size()

    • Returns the number of elements in the collection.


Iterator Operations

  1. Iterator<E> iterator()

    返回一个迭代器以遍历集合中的所有数组

Array Conversion

  1. Object[] toArray()

    • Converts the collection to an array of Object.

  2. <T> T[] toArray(T[] a)

    • Converts the collection to an array of the specified type.


②由于List有序,引出索引相关方法

1.删

        remove(int index)

2.改

        set(int index,Object obj)

3.查

        get(int index)

4.插

        void add(int index,Object obj)

5.长度

        size()

6.遍历

        Iterator

        增强for循环

  //(数据类型)  (元素名)  (集合或数组)
for(ArrayList element : ArrayList){
System.out.ptint(element)
}

        一般for循环

3.具体实现类

1.ArrayList(主要)

2.Vector(过时了,线程安全)

3.LinkedList

3.Set接口

常用实现类

HashSet使用哈希表实现的 Set,不保证元素的顺序,性能非常高,适用于快速查找。
LinkedHashSet基于 HashSet 实现,但维护了元素插入顺序。
TreeSet基于 TreeMap 实现,保证集合中的元素是有序的(自然排序或自定义排序)。

常用方法:(如上)

1.Set中无序性、不可重复性的理解(以HashSet及其子类为例说明)
  • 无序性1=随机性

添加元素的顺序与遍历元素的顺序不一样不属于无序性

无序性与添加的元素的位置有关,不像ArrayList是紧密,有序的

  • 不可重复性:添加带Set中的元素是不能相同的.

    比较的标准,需要判断HashCode()得到的哈希值以及equals()得到的Boolean型结果

    哈希值相同且equals()返回true,则认为元素是相同的.

4.Map接口

1.Map实现类

java.util.Map:存储一对一对的数据(key-value键值对,(x1,x2),(x2,y2)--> y=f(x),类似于高中的函数)

|----HashMap(主要实现类);线程不安全,效率高;可以添加null的key和value值;底层使用数组+单向链表+红黑树结构存储

|----LinkedHashMap:是HashMap的子类;在HashMap使用的数据结构的基础上,增加了一对双向链表,用于记录添加的元素的先后顺序,进而我们在遍历元素是,就可以按照添加的顺序显示。

开发中,对于频繁的的遍历操作,建议使用此类。

|----Hashtable:线程安全,效率低;可以添加null和value值;底层使用数组+单向链表结构存(jdk8)

|----TreeMap:底层使用红黑树存储;可以按照添加的key-value中的key元素的指定的属性大小顺序进行遍历。需要考虑使用①自然排序 ②定制排序

|----Properties:其kay和value都是String类型。常用来处理属性文件。

2.HashMap中元素的特点

  • HashMap中所有的key彼此之间是不可重复的、无序的。所有的key就构成一个Set集合。---->key所在的类要重写hashCode()和equals()

  • HashMap中的所有中的所有value彼此之间是可重复的 无序的.所有value就构成一个Collection集合 --->value所在的类要重写equals()

  • HashMap中的所有的entry彼此之间是不可重复的 无序的。所有的entry就构成了一个Set集合

3.Map中的常用方法

Basic Operations:

5.泛型

泛型类\接口

1.声明格式

class A<T>{

T(此时可以当作数据类型)

  1. put(K key, V value): Adds or updates a key-value pair.

  2. putAll(Map m): Copies all mappings from another map into this map.

  3. get(Object key): Retrieves the value associated with a key.

  4. remove(Object key): Removes the mapping for a key.

  5. containsKey(Object key): Checks if a key exists.

  6. containsValue(Object value): Checks if a value exists.

  7. size(): Returns the number of key-value pairs.

  8. isEmpty(): Checks if the map is empty.

  9. clear(): Removes all entries from the map.

  10. replace(K key, V value): Replaces the value for the specified key if it exists.

  11. replace(K key, V oldValue, V newValue): Replaces the value only if the key is mapped to the specified old value.

  12. 4.TreeMap的使用

  13. 底层使用红黑树存储;

  14. 可以按照添加的key-value中的key元素的指定属性大小顺序进行遍历。

  15. 需要考虑使用①自然排序 ②定制排序

  16. 要求:向TreeMap中添加的key必须是同一个类型的对象

2.使用说明

  1. 我们在声明完自定义泛型类以后,可以在类的内部(比如:属性\方法\构造器中)使用类的泛型

  2. 我们在创建自定义泛型类的对象时,没有指明泛型参数类型,那么泛型将被擦除,泛型对应的类型均按照Object处理,但不等价于Object

  3. 如果在创建自定义泛型类的对象时,可以知名泛型参数类型.一旦知名,内部凡是使用类的泛型参数的位置,都具体化为指定的类的泛型类型

  4. 泛型的指定中必须使用引用数据类型

  5. 出创建泛型类对象外,子类继承泛型类时,实现类实现泛型接口时,也可以确定泛型结构中的泛型参数.如果我们在给泛型类提供子类是,子类也不确定泛型的类型,则可以继续使用泛型参数.还可以在现有父类额的泛型基础上,新增泛型参数

由于数据多变,若直接设定存放Object类,会导致类型不安全

指定一个不确定的类型,可以是任何引用数据类型,一旦指定引用数据类型,就只能添加此一种数据

<>

1.泛型方法的优点

  1. 复用性高:可以在一个方法内用不同的引用数据类型

  2. 类型安全:不同于直接Object泛型

  3. 灵活性:泛型方法可以用于泛型类和非泛型类

泛型在继承中的实现

ArrayList<Object> list = new ArrayList<>();
    ArrayList<String> list1 = new ArrayList<>();
    list = list1;

上面的代码错误 解释:

  1. 泛型是不可变的...虽然String时Object的子类,但ArraysList<String>不是ArrayList<Object>的子类

  2. 如果声明允许,就不符合类型安全.会破环list1设定的初衷

ArrayList<Object> list = new ArrayList<>();
ArrayList<String> list1 = new ArrayList<>();
list = list1; // Hypothetically allowed
list.add(42); // Add an Integer to list, which is also a list1 reference
String s = list1.get(0); // Type mismatch, leads to runtime error
报错

正确方法:(通配符)

ArrayList<?> list = new ArrayList<>();
ArrayList<String> list1 = new ArrayList<>();
list = list1; // Allowed, but list is now read-only
​

有于list类型不确定,地址指向了list1(ArrayList<String>),为了保证类型安全,设定为list只可以读取数据不能增或改

限定范围的通配符

<? extends Object>意味着指定的类型小于或等于Object,依旧只可读.

<? super String>意味着指定类型大于或等于String类,由于String一定是本类或子类,所以可以在此类型中修改数据(多态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值