Java 集合类 接口

List、Set、Map、Arrays

Collection接口、 Iterator(迭代器)接口

Iterator接口

Iterator(迭代器)接口并不是一种集合类型,用来遍历并有选择地删除集合中的元素,通过Collection接口定义的iterator()方法得到,其主要方法有三个:

1. boolean hasNext()    判断是否还有下一个元素

2. Object next()             获得下一个元素

3. void remove()           从集合中删除当前元素

4. boolean   hasNext()      判断是否存在下一个可访问的元素

5. Object next()        返回要访问的下一个元素

Collection接口

Collection是Java集合框架的根接口,它定义了各种集合的最大共性,该接口中定义的主要方法如下:

1. int size()          返回集合中的元素个数

2. boolean isEmpty()       判断集合是否为

3. boolean contains(Object o)      判断集合是否包含元素o

4. Iterator iterator()        得到集合的迭代器

5. Object[ ]  toArray()          将集合转换为数组,返回的数组包含集合中所有元素

6. boolean   add(Object o)      向集合中添加元素,添加成功返回true,否则返回false

7. boolean remove(Object o)    删除集合中元素,删除成功返回true,否则返回false

8. boolean containsAll(Collection c)     判断当前集合是否包含c中所有元素

9. boolean addAll(Collection c)       将c中所有元素添加到当前集合中

10. boolean removeAll(Collection c)      删除当前集合中也被c包含的所有元素

11. boolean retainAll(Collection c)     仅保留当前集合中也被c包含的所有元素

12. void clear()       删除集合中所有元素

13. void sort(List list)  对列表list按元素自然顺序升序排列,元素对应类型须实现Comparable接口

14. void sort(List list,Comparator c)    对列表list中的所有元素按比较器c升序排列

15. int binarySearch(List list,Object o)    使用折半查找法在列表list中查找与o“相等”的元素,返回找到元素的索引,列表a必须有序

16. void reverse(List list)    反转列表list中的所有元素

17. void shuffle(List list)     将列表list中的所有元素随机打乱

18. void swap(List list,int i,int j)    交换列表list中索引i和j处的元素

19. void fill(List list,Object o)      用元素o填充列表list

20. void copy(List dest,List src)  将列表src复制到列表dest,dest的长度必须大于或等于src,若dest长度较src大,则不会影响dest中剩余元素

21. Object  min(Collection c)  按照自然顺序得到集合c中的“最小”元素,元素对应类必须实现了Comparable接口。

22. Object  min(Collection c,Comparator cmp)     按照比较器cmp得到集合c中的“最小”元素

23. Object  max(Collection c)  按照自然顺序得到集合c中的“最大”元素,元素对应类必须实现了Comparable接口。

24. Object  max(Collection c,Comparator cmp)     按照比较器cmp得到集合c中的“最大”元素

25. boolean replaceAll(List list,Object old,Object new)   用new替换list中所有与old“相等”的元素

26. int indexOfSubList(List src,List target)      得到子列表target在列表src中第一次出现的索引

27. int lastIndexOfSubList(List src,List target)    得到子列表target在列表src中最后一次出现的索引

比较器

1.自然排序:Comparable接口

2.定制排序:Comparator接口

// 如:

public static  class CustomeComparator implements Comparator<Student>{
        // 根据学生成绩进行排序
        public int compare(Student st1, Student st2) {
            return st1.socre-st2.socre;
        }
    }


//return:
//负数:		前者 < 后者
//0:			两者相等
//正数:		前者 > 后者


//或
// int compare(T obj1, T obj2)

3.  h1.compareTo(h2)

     返回值:
                     h1>h2  返回 1

                     h1=h2  返回 0

                     h1<h2  返回 -1

     注意:

                    h1、h2为String类型时,返回两者长度差值

                    如:h1 = “abcd”,h2 = “ab”

                            h1.compareTo(h2)    返回 2

                            h2.compareTo(h1)    返回 -2

List接口

ArrayList的随机访问性能好,LinkedList动态插入、删除元素所用时间少

List接口常用方法

1.void add(int index,Object o)      在index位置插入o元素

2.boolean addAll(int index, Collection c)         从index位置开始将c中的所有元素添加进来

3.Object get(int index)        获取指定index位置的元素

4.Object set(int index,Object o)     将指定index位置的元素替换为o

5.Object remove(int index)      删除指定index位置的元素,并返回此元素

注意:Collection中的remove是删除某个元素,这里是方法的重载而不是方法的重写 ,因为方法名一样,但形参类型不一样,在List中也可以按照对象去删除

6.int indexOf(Object obj)       返回obj在集合中首次出现的位置 ,如果没有就返回-1

7.int lastIndexOf(Object obj)        返回obj在集合中末次出现的位置 ,如果没有就返回-1

8.List subList(int fromIndex, int toIndex)      返回从fromIndex到toIndex位置的子集,本身的list没有变化

List接口的常用实现类有两个:ArrayList和LinkedList,分别对应列表的顺序存储方式和链式存储方式

ArrayList(顺序列表)

 List<类型> listname = new ArrayList<类型>();

LinkedList(链式列表)

 List<类型> listname = new LinkedList<类型>();

Set接口 

描述不能包含重复元素的无序集合

Set有一个常用的子接口SortedSet(有序集合),集合中的所有元素按某种顺序呈升序排列,这种顺序既可以是元素的自然顺序,也可以是根据创建集合时指定的比较器(Comparator)所定制的比较规则而得到的顺序

Sorted接口的主要方法如下:

1. Comparator comparator()       获得对集合中元素排序的比较器,若使用元素的自然顺序排序,则返回null

2. SortedSet  subset(Object from,Object to)      返回从from到to位置的元素组成的子集合

3. SortedSet  headSet(Object to)              返回从集合头到to位置的元素组成的子集合

4. SortedSet  tailSet(Object from)            返回从from到集合尾的元素组成的子集合

5. Object    first()         获得有序集合的第一个元素

6. Object    last()         获得有序集合的最后一个元素

7. add()      向集合中添加元素

8. size()     统计集合内元素个数

9. isEmpty()       判断集合是否为空

HashSet、LinkedHashSet(哈希集合)

规则:调用元素的hashCode方法计算出该元素的哈希码,若该值与集合中已有元素的哈希码值都不相同,则认为该元素不重复,可添加

           若该值与某个元素哈希码值相同,则继续调用equals方法进一步判断,若equals方法返回true,则说明重复,否则不重复

对于哈希集合来说,若重写了元素对应类的equals或hashCode方法中的某一个,则必须重写另一个,以保证两者有相同的判等逻辑,即两个使equals返回true的对象哈希码是相同的

 Set<String> linkedHashSetname = new  LinkedHashSet<String>();

HashSet和LinkedHashSet对象都不允许添加重复元素,但LinkedHashSet的遍历结果与添加顺序一致,而HashSet遍历结果是无序

TreeSet(树形集合)

TreeSet与HashSet特性类似,但TreeSet采用树形结构来存取集合元素,集合元素较多时,操作性能将低于HashSet和LinkedHashSet

另外TreeSet实现了SortedSet接口,允许对集合元素排序,排序方式分为自然排序和自定义排序,其中自然排序是默认的排序方式

(1)自然排序

int compareTo(Object o)方法,实现该接口的类的对象可以相互比较“大小”

具体来说,若方法返回0,则表示当前对象与对象o“相等”

                  若返回正数,则表示当前对象“大于”对象o

                  若返回负数,则表示当前对象“小于”对象o

一般应使compareTo方法返回0的逻辑与该类的equals方法返回true的逻辑相同

要使用自然排序方式,元素对应类必须实现Comparable接口,TreeSet会根据重写的compareTo方法的返回值,将集合中元素按大小关系升序排列

(2) 自定义排序

自定义排序方式通过TreeSet构造方法指定的比较器确定被比较的两个元素的“大小”关系,然后将集合元素按照大小关系升序排列

int compare(Object o1,Object o2)的返回值意义同上述compareTo方法是一致的,自定义排序的优先级高于自然排序方式。

Map接口

键-值对(key-value pairs)

Map未继承Collection接口,不允许包含重复的键,因为键用来唯一标识键值对元素

方法

(1)   int size()         获得键值对个数

(2) boolean isEmpty()     判断map对象是否为

(3)   boolean containsKey(Object k)         判断map对象是否包含键k

(4)   boolean containsValue(Object v)          判断map对象是否包含值v

(5)   Object get(Object k)            获得map对象中键k对应的值

(6)   Object put(Object k,Object v)       向map对象中添加键值对,若键存在,则用v替换旧值

(7)   Object remove(Object k)       删除键为k的键值对

(8)   void putAll(Map m)         将map全部对象m添加到当前map对象中

(9)   void clear()        清空map对象

(10)  Set keyset()         获得所有键构成的集合

(11)  Collection values()         获得所有值构成的集合

(12)  Set entrySet()                   获得所有键值对构成的集合

HashMap、LinkedHashMap

同HashSet、LinkedHashSet

HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在

TreeMap

同TreeSet

Arrays

Arrays类提供了对数组操作(查找,排序等)的众多静态方法

排序

1. void sort(xxx[] a)     对数组a升序排序,xxx可以是boolean外的7种基本类型,也可以是Object类型(此时根据自然排序,元素要实现Comparable接口),该方法是稳定的,也即对于相等的元素不改变本来的顺序,下面的sort方法(包括Collections的)也一样

2. void sort(xxx[] a,int from,int to)         与方法1类似,参数2(含)和参数3(不含)指定了排序范围的起止下标

3. void sort(xxx[] a,int from,int to,Comparator c)       与方法2类似,但根据参数4指定的比较器进行排序

查找

1. int binarySearch(xxx[] a,xxx k)         利用折半法在数组a中查找元素k,返回找到元素的索引,数组a必须是有序的

2. void binarySearch (xxx[] a,int from,int to,xxx k)        与方法1类似,参数2(含)和参数3(不含)指定了查找范围的起止下标

3.  void binarySearch(xxx[] a,int from,int to,Object k,Comparator c)   与方法2类似,但根据参数4指定的比较器进行排序

相等、填充

1. boolean equals(xxx[] a1,xxx[] a2)        判断数组a1和a2是否“相等”,当a1和a2具有相同长度且对应元素都“相等”时,返回true。xxx可以是任意类型

2. void fill(xxx[] a,xxx v)         用v填充数组的每一个元素。

3. void fill(xxx[] a,int from ,int to,xxx v)       与方法2类似,参数2(含)和参数3(不含)指定了填充范围的起止下标

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值