JAVA集合类

JAVA——集合总结

一、集合类

1、集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

2、集合类和数组的区别

(1)数组虽然也可以存储对象,但长度是固定的;而集合长度是可变的。
(2)数组中可以存储基本数据类型,集合只能存储对象

二、Collection接口概述

1、Collection集合

  • (1)Collection 是层次结构中的根接口。
  • (2)Collection 表示一组对象,这些对象为 collection 的元素。这些元素有唯一的,有有序的,有无序的。

2、集合的集合体系

3、Collection接口成员方法:

  • 添加功能 boolean add(object obj) 添加一个元素
  • boolean addAll(Collection c) 添加一个集合的元素
  • 删除功能 void clear() 移除所有元素
  • Boolean remove(object o) 移除一个元素
  • Boolean removeAll(Collection c) 移除一个集合
  • 判断功能 boolean contains(Object o) 判断集合中是否包含指定的元素
  • boolean containsAll(Collection c) 判断集合中是否包含指定的集合元素
  • boolean isEmpty() 判断集合是否为空
  • 获取功能 Iterator iterator() (重点)
  • 长度功能 Int size() 集合中元素的个数
  • 交集功能 boolean retainAll(Collection c)
  • 把集合转换为数组 Object[] toArray()

4、集合的使用步骤

  • A:创建集合对象
  • B:创建元素对象
  • C:把元素添加到集合
  • D:遍历集合

5、Collection集合的遍历

  • (1)将集合转化为数组 :Object[] toArray():把集合转成数组,可以实现集合的遍历
  • (2)利用Iterator迭代器
    步骤:
  • A:通过集合对象获取迭代器对象 
  • B:通过迭代器对象的hasNext()方法判断是否有元素 
  • C:通过迭代器对象的next()方法获取元素并移动到下一个位置
Collection c = new Collection();</br>
Iterator it = c.iterator();</br>
While(it.hasNext()){</br>
 String s = (String)it.next();</br>
 System.out,println(s);</br>
}
迭代器为什么是一个接口,而不定义为一个类呢?
  • 1. 假设迭代器定义的是一个类,我们就可以创建该类对象,调用该类方法实现集合的遍历。而Java提供了很多集合类,这些集合类的数据结构是不同的,所以,存储方式和遍历方式也应该不同,所以,迭代器没有定义为类。
  • 2. 无论何种集合,都具备元素获取和判断的功能,所以通过接口将这两种方法提取出来,不提供具体实现。具体的实现以内部类的形式体现。

三、List集合

1、概述

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

2、List集合的特有方法

  • 添加功能:void add(int index,E element)
  • 删除功能:E remove(int index)
  • 获取功能:E get(int index)
  • 修改功能:E set(int index,E element)
  • 迭代器:ListIterator listIterator()

3、List集合的特有遍历功能:由size()和get()组成

List list = new ArrayList();
//添加元素
……
//遍历
for (int x = 0; x < list.size(); x++) {
        String s = (String) list.get(x);
    System.out.println(s);
}

4、List子类的特点

  • (1)ArrayList:底层数据结构是数组,查询快,增删慢;线程不安全,效率高;
  • (2)Vector:底层数据结构是数组,查询快,增删慢;线程安全,效率低;
  • (3)LinkedList:底层数据结构是链表,查询慢,增删快,;线程不安全,效率高。
到底使用谁呢?看需求。

【分析】

  • 如果要安全:用Vector
  • 不要求:ArrayList或者LinkedList
  • 查询多;ArrayList
  • 增删多:LinkedList

四、Set集合

1、set集合的特点:无序、唯一

2、HashSet集合:底层数据结构是哈希表(一个元素为链表的数组)

  • (1)哈希表底层依赖两个方法:hashCode()和equals()
  • 执行顺序: 首先比较哈希值是否相同 相同:继续执行equals()方法 返回true:元素重复了,不添加 返回false:直接把元素添加到集合 不同:就直接把元素添加到集合
  • (2)如何保证元素唯一性的呢?
由hashCode()和equals()保证的

3、TreeSet集合:底层数据结构是红黑树(是一个自平衡的二叉树)

  • 保证元素的排序方式 - a:自然排序(元素具备比较性):让元素所属的类实现Comparable接口
  • b:比较器排序(集合具备比较性):让集合构造方法接收Comparator的实现类对象(重写Comparator()对象的Compare()方法)
 TreeSet<tts = new TreeSet<T>(new Comparator<T>() {
            @Override
            public int compare(T T1,T T2){
            }
        });

五、Map集合

1、概述

  • (1)将键映射到值的对象
  • (2)一个映射不能包含重复的键
  • (3)每个键最多只能映射到一个值

2、Map接口和Collection接口的不同

  • A:Map 存储的是键值对形式的元素,键唯一,值可以重复。
  • B:Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。

3、Map接口功能概述

  • A:添加功能:V put(K key,V value)
  • B:删除功能:V remove(Object key) void clear()
  • C:判断功能: boolean containsKey(Object key)
         boolean containsValue(Object value)
         boolean isEmpty()
  • D:获取功能:V get(Object key)
  • E:长度功能:int size()

4、Map集合的遍历

(1)方式一:键找值
- a:获取所有键的集合
- b:遍历键的集合,得到每一个键
- c:根据键到集合中去找值
(2)方式二:键值对对象找键和值
- a:获取所有的键值对对象的集合
- b:遍历键值对对象的集合,获取每一个键值对对象
- c:根据键值对对象去获取键和值

Map<String,Stringhm = new HashMap<String,String>();

            hm.put("it002","hello");
            hm.put("it003","world");
            hm.put("it001","java");
方式1 键找值
Set<Stringset = hm.keySet();
for(String key : set) {
    String value = hm.get(key);
    System.out.println(key+"---"+value);
}
方式2 键值对对象找键和值
Set<Map.Entry<String,String>set2 = hm.entrySet();
for(Map.Entry<String,Stringme : set2) {
        String key = me.getKey();
        String value = me.getValue();
System.out.println(key+"---"+value);

六、Collections

1、是针对集合进行操作的工具类
2、(面试题)Collection和Collections的区别
- A:Collection 是单列集合的顶层接口,有两个子接口List和Set
- B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等 

3、常见的几个小方法:

  •  A:public static <T>void sort(List<T> list)
  •  B:public static <T>int binarySearch(List<?> list,T key)
  •  C:public static <T> T max(Collection<?> coll)
  •  D:public static void reverse(List<?> list)
  •  E:public static void shuffle(List<?> list)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值