集合进阶


集合进阶

0.1 概要

1. Collection (单列):

  • List (可重复): ArrayList, LinkedList
  • Set (不可重复): HashSet, TreeSet

2. Map (双列)

  • HashMap

3. Tips (其他方面)

  1. Collection, Map, List, Set 等为接口
  2. ArrayList, LinkedList, HashSet, TreeSet, HashMap 等位实现类
  • 技巧:Ctrl + Alt + v 快速生成

1. Collection :

1. Collection 集合常用方法:

1. boolean add(E e)  //添加元素
2. boolean remove(Object o)  //从集合中移除指定元素
3. void clear()  //清空结合中所有元素
4. boolean contains(Object o)  //判断集合中是否存在指定元素
5. boolean isEmpty()  //判断集合是否为空
6. int size()  //集合的长度,也就是集合中元素的个数

2. Collection 集合的便利:

Collection<String>() c = new ArrayList<String>();
Interator<String> i = c.interator();
while (i.hasNext())
{
    String s = i.next();
    System.out.println(s);
}

2. List :

1. List 集合常用方法 :

1. void add (int index, E element)  //添加元素
2. E remove(int index)  //删除指定索引处元素
3. E set(int index, Object o)  //修改索引处的元素,返回被修改的元素(被修改前的元素)
4. E get(int index)  //返回指定位置的元素

2. 特点

  1. ArrayList 底层是数组 (查询快,增删慢)
  2. LinkedList 底层是链表 (查询慢,增删快)

3. LinkedList :

LinkedList集合的特有功能:

1. void addFirst(E e)  //头插元素
2. void addLast(E e)  //尾插元素
3. E getFirst()  //返回列表第一个元素
4. E getLast()  //返回列表最后一个元素
5. E removeFirst()  //删除列表第一个元素
6. E removeLast()  //删除列表中最后一个元素

4. 其他

  1. List 的并发异常修改
  2. [10, 233, 3223] (集合输出格式)

3. Set:

1. 特点:

  1. 无重复元素
  2. 没有带索引的方法,所以不能使用普通的for循环

2. HashSet 集合特点:

  1. 底层数据结构是哈希表
  2. 对集合的迭代顺序不做保证,不保证存储和去取出的元素顺序一样
  3. 没有带索引的方法,所以不能使用普通的 for 循环便利
  4. 由于是 Set 集合,所以不包含重复元素

3. HashSet 存储元素:

  • 要保证元素唯一性,需要重写 hashCode() 和 equals()

4. LinkedHashSet 集合特点:

  1. 哈希表和链表实现的 Set 接口,具有可以测的迭代次序
  2. 由链表保证元素有序,也就是存储和取出顺序一样
  3. 由哈希表保证元素唯一,也就是没有重复的元素

5. TreeSet 集合特点:

  1. 元素有序 (按照构造方法排序)
    • TreeSet(): 根据元素的自然顺序进行排序
    • TreeSet(Comparator<?> Comparator) : 根据指定的比较器进行排序
  2. 没有带索引的方法,不能使用普通 for 循环遍历
  3. 由于是 Set 集合,所以不包含重复元素
  4. (用 int 类型的包装类型Integer,因为是集合)

4. 其他

1. 哈希值

  • 默认情况下,不同对象的哈希值不同。
  • 而重写hashCode(), 可以使哈希值相同

2.自然排序Comparable

  • 自然排序,就是让元素所属的类实现 Comparable 接口,重写ComparableTo(T O) 方法
  • 接口:implements Comparable (记得后面接收遍历名), 重写CompareTo(T O) 方法

3. 比较器的使用

  • 用 Tree 集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序。
  • 比较器排序,就是让集合构造方法结构 Comparator 实现类对象,重写 Comparable (T O1, T O2)方法

5. 泛型

1. 泛型定义格式

  1. <类型>: 指定一种类型的格式。这里的类型可以看成形参。
  2. <类型1,类型2 … > 指定多种类型的形式。这里的类型可以看作形参。

2. 泛型的好处

  1. 把运行期间的问题提前到了编译期。
  2. 避免了强制类型转换。

3. 泛型类定义格式:

  1. 修饰符 class 类名<类型> { }
  2. public class Generic { }

4. 泛型方法

  1. 格式:修饰符<类型> 返回值类型 方法名(类型 变量名) { }

  2. 范例:

    public<T> void show(T t) {
    }

5. 泛型接口:

  1. 格式:修饰符 interface 接口名<类型> { }

  2. 范例

    public interface Generic<T> {
    }

6. 类型通配符

  1. 类型通配符 <?>

    • 例如:

      List<?> list = new ArrayList<Object>();
  2. 类型通配符上限:<? extends 类型>

  3. 类型通配符下限:<? super 类型>

7. 可变参数

  • 又称为参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的
  1. 格式:修饰符 返回值类型 方法名 (数据类型…变量名) { }

  2. 范例:

    public static int sum (int ...a) { }  //实际传递的是数组,需要迭代求和
  3. 实际例子

public class sum_1 {
	public static void mian(String [] args) {
		System.out.println(sum(21, 12, 21, 12, 12, 12, 12, 21))
	}
	public static int sum (int ...a) {  //实际传递的是数组
		int sum = 0;
		for (int i : a) {
			sum += i;
		}
		return sum;
	}
}

6. Map :

1. 特点:

  • 多态的方式创建 Map 对象

2. Map 集合的基本功能:

1. V put (K key, V value)  //添加元素
2. V remove (Object key)  //根据键删除元素
3. void clear()  //清空
4. boolean containKey(Object key)  //判断集合是否包含指定的键
5. boolean containValue(Object value)  //判断集合是否包含指定的值
6. boolean isEmpty()  //判断集合是否为空
7. int size()  //返回集合长度

3. Map集合的获取功能:

1. V get(Object key)  //根据键获取值
2. Set<K> keySet()  //获取所有键的值
3. Collection<V> values()  //获取所有值的集合
4. Set<Map.Enter<K,V>> entrySet()  //获取所有键值对对象的集合 —— 获取所有键值对对象的集合后,可以用 getKey() 和 getValue() 的方法来获取键和值

4. 注意:

  • 重写两个方法来保证键的唯一性:hashCode() 和 equals()

5. TreeMap: 参考TreeSet

  • 默认按照键排序

7. Collections:

1. Collections 概述:

  • 是针对集合操作的工具类

2. Collections 类的常用方法:

1. public static <T extends Comparable <?super T>> void sort (List<T> list) //升序排序
2. public static void reverse(List<?> list)  //反转指定列表的元素 (单纯反转)
3. public static void shuffle(List<?> list)  //使用默认的随机源随机排序列表

文章作者: han yue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 han yue !
评论
  目录