Java基础——集合
集合框架 ? Java.util.Collection Collection接口中的共性功能 1,添加 ? ?booblean add(Object obj);? 往该集合中添加元素,一次添加一个 ? ?boolean addAll(Collection c);? 将指定 collection 中的所有元素都添加到此 collection 中 2,删除 ? ?void clear(); 移除此 collection 中的所有元素 ? ?boolean remove(Object o);???从此 collection 中移除指定元素的单个实例,如果存在的话 ? ?boolean removeAll(Collection e); 移除此 collection 中那些也包含在指定 collection 中的所有元素 3,获取 ? ?int size(); 返回此 collection 中的元素数。 4,判断 ? ?boolean isEmpty(); ? ?boolean contains(Object o);?如果此 collection 包含指定的元素,则返回 true。 ? ?boolean containsAll(Collection c);?如果此 collection 包含指定 collection 中的所有元素,则返回 true。 5,将集合转成数组 ? ?toArray(); 返回包含此 collection 中所有元素的数组。 ? ?toArray(T[ ] a);?返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 6,取出集合元素 ? ?Iterator iterator(); 获取集合中元素上迭代功能的迭代器对象; ? 返回在此 collection 的元素上进行迭代的迭代器。 迭代:取出元素的一种方式; 迭代器:具备着迭代功能的对象; 而迭代器对象不需要new,直接通过iterator()方法获取即可,迭代器是取出Collection集合中元素的公共方法. Collection |--List:有序(存入的顺序和取出的顺序一致)有索引,允许重复元素 |--Set:不允许重复元素 重点List接口中的特有方法:它的特有方法都是围绕索引定义的.List支持增删改查; 1.增 add(index,element); 2,删 remove(index); 3,改 set(index,new element); 4,查 int indexOf(element); element get(index); ? List集合的具体子类;子类之所以区分是因为内部的数据接口(存储数据的方式)不同。 JDK1.0 |--Vector:数据结构是数组;数组是可变长度的(不断new新数组并将原数组元素复制到新数组),线程是同步的,增删和查询都比较慢。 JDK1.2 |--ArrayList:也是数组结构,也是长度可变的。线程不同步的,替代了Vector增删速度不快,查询速度很快。 ? ? ? ? ? ? ?|--LinkedList:链表结构,线程不同步的。增删速度很快,查询速度较慢。 ? LinkedLisgt的特特殊方法: 1,增加元素 ? ?addFirst(E e);将指定元素插入此列表的开头。 addLast(E e):将指定元素添加到此列表的结尾。 2,获取元素 ? ?getFirst();返回此列表的第一个元素。 ? ?getLast();返回此列表的最后一个元素。 3,删除元素 ? ?removeFirst();移除并返回此列表的第一个元素。 ? ?removeLast();? ?移除并返回此列表的最后一个元素。 ? ? ? Set集合:不允许重复元素;和Collection的方法相同;Set集合取出方法只有一个:迭代器 |--HashSet:哈希(散列)表结构? ? ?|--LinkedHashSet:哈希表+链表结构。可以实现有序 ? ?此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。? 如何保持元素唯一性? ? ?元素必须覆盖hashCode()和equals()方法; ? ?hashCode()方法是为了根据元素自身的特点确定哈希值;覆盖equals()方法是为了解决哈希值的冲突(只有hashCode()方法一致时在需要equals()方法)。 |--TreeSet:可以对元素进行排序;不同步的,二叉树数据结构 ? ?排序方式一:需要元素具备比较功能.所以元素需要实现Comparable接口,覆盖CompareTo方法 ? ? ? 如何保证元素唯一性? ? ? ? ? ?参考的就是比较方法的返回值是否为0;是,则是重复元素,不进行存储。 ? ? ? ? ?需求中也有这样的一种情况,元素具备的比较功能不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方式,对元素进行排序。 ? ? ? ? ?而且,存储到TreeSet中的元素万一没有比较功能,该如何排序呢? ? ?排序方式二:实现Comparator接口覆盖Compare()方法。将Comparator接口的对象,作为参数传递给TreeSet集合的构造函数。 ? ?比较器较为灵活,自然排序通常作为元素的默认排序,一般不建议改动,要想自定义排序方法,推荐排序方式二。 集合技巧: JDK1.2以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是所属体系名 |--List ? ?ArrayList:数组结构;看到数组结构,就需要知道 查询快,看到List就知道可以重复,可以增删改查。 ? ?LinkedList:链表结构,增删快。特有方法:xxxFirst? ?xxxLast? ?addxxx? ?getxxx?? removexxx |--Set ? ?HashSet:哈希表,查询速度更快,一看到这个就需要想到元素必须覆盖hashCode()方法和equals()方法。不保证有序,看到Set,就需要知道元素不可以重复。 ? ?LinkedHashSet:链表+哈希表。因为由链表,所以可以实现有序。 ? ?TreeSet:二叉树,可以排序。一看到这个集合要想到两种比较方式: (1)一种是自然排序Comparable (2)一种是自定义比较器 Comparator ? ? ? ? Map集合:双列集合,一次存储一对,键值对;要保证键的唯一性,重复键会覆盖前面键的值。 共性的功能 1,添加 ? ?V put(K key,V value);?将指定的值与此映射中的指定键关联。 ? ?putAll(Map<k,v> map);??从指定映射中将所有映射关系复制到此映射中。 2,删除 ? ?void clear();??从此映射中移除所有映射关系。 ? ?v remove(key);??如果存在一个键的映射关系,则将其从此映射中移除。 3,判断 ? ?boolean containsKey(Object o);?如果此映射包含指定键的映射关系,则返回 true。 ? ?boolean containsValue(Object o);??如果此映射将一个或多个键映射到指定值,则返回 true。 ? ?boolean isEmpty();?如果此映射未包含键-值映射关系,则返回 true。 4,获取 ? ?V get(key);?返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 ? ?int size();?返回此映射中的键-值映射关系数。 ? ? Map ? ?|--Hashtable:哈希表结构,是同步的,不允许null键、null值;。 ? ?|--HashMap:哈希表结构,是不同步的,允许null键、null值;。 ? ?|--TreeMap:二叉树结构,是不同步的。可以对map集合中的键进行排序 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |