Java集合框架

Posted AntarcticPenguin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架相关的知识,希望对你有一定的参考价值。

挺多的,整理用了很长时间,外加理解。

1、集合概述

  • 这些接口和类大致分为3层
  • 第一层是接口,包括:Conllection接口、List接口、Set接口和Map接口。
  • 第二层是抽象类,AbstractConllection、AbstractList、AbstractSet、AbstractMap。方便第3层的使用
  • 第三层是实际要使用的类

2、Collection接口

  • 最顶层的接口就是Collection
  • (1)第一类方法,向集合中添加对象
                    public boolean add(Object o),添加一个元素
                    public boolean addAll(Collection c),添加多个
  • (2)第二类方法,从集合中删除元素的
                    public boolean remove(Object o),删除指定元素
                    public boolean addAll(Collection c),删除多个
                    public void clear(),删除所有
                    public boolean retainAll(Collection c),只保留部分
  • (3)第三类方法,判断集合中元素的方法
                    public boolean isEmpty,判断集合是否为空
                    public boolean contains(Object o),判断是否包含
                    public boolean containsAll(Collection c),包含多个
                    public int size(),集合中元素的个数
  • (4)第四类方法,进行转换的方法:
                    public Iterator iterator(),转换成迭代器
                    publicObject[] toArray(),转换成集合 
 
  • (5)第五类方法,通用的方法
                    public boolean equals(Object o),判断是否与另外的一个对象相同
                    publicinthashCode(),放回集合的哈希码。
                    public void clear(),删除所有
                    public boolean retainAll(Collection c),只保留部分
这里没有提供修改的元素,因为在集合里面没有顺序,没有办法定位要修改哪一个

3、Set接口

  • Set接口表示集合,元素不重复,与Collection接口基本一致,方法与Collection完全相同
  • SortedSet继承了Set接口,元素按升序排列(大小的有序)。
  • (1)第一类方法,得到相关的Comparator对象
                    public Comparator comparator(),返回comparator对象
  • (2)第二类方法,获取子集的方法:
                    public SortedSort subSet(Object fromElement,Object toElement),
                    public SortedSet headSet(Object toElement)
                    public Sortedert tailSet(Object fromElement)
  • (3)第三类方法,获取元素的方法:
                    public Object first()和 public Object last()

4、List接口

  • List接口继承Collection接口,元素是有序的(先后位置的有序),所以多了一些与顺序相关的方法
  • (1)第一种方法,在指定的位置上添加元素
                    publicvoid add(int index,Object o)
                    public boolean addAll(int index,Collection c)
  • (2)第二种方法,删除指定位置的元素:
                    public Object remove(int index)
  • (3)第三种方法,获取部分元素:
                    public Object get(int index)
                    public List subList(int fromIndex,int toindex)
  • (4)第四种方法,查找元素
                    public int indexOf(Object o)
                    public int lastIndexOf(Object o)
  • (5)第五种方法,修改元素的方法:
                    public Object set(int index,Object o)
  • (6)第六种方法,转换成有顺序的迭代器:
                   public Listlterator listlterator()
                   public Listlterator listlterator(int index)
List与Set相比,主要是增加了元素之间的顺序关系,并且允许元素重复。

5、Map接口

  • 它的每个元素包括两个部分:键(key)和值(Value)。同一个Map对象中不允许使用相同的键,但是允许使用相同的值。所以Map接口隐含的有3个集合:键的集合、值的集合和映射的集合。
  • (1)第一类方法,添加元素的方法:
                     public Object put(Object key,Object value),添加一个
                     public void putAll(Map m),添加多个元素
  • (2)第二类方法,获取元素的方法:
                     public Object get(Object key)
  • (3)第三类方法,删除元素的方法:
                     public Object remove(Object key)
  • (4)第四类方法,键集合、值集合和映射集合
                     public Set entrySet(),获取映射的集合
                     public Collection values(),获取值的集合
                     public Set keySet(),返回所有键名的集合
  • (5)第五类方法,是否存在指定的Key和Value
                     public boolean containsValue(Object value)
                     public boolean containsKey(Object key) 
  • Map中的元素是无序的,SortedMap接口有序

6、Iterator接口和Enumeration接口

  • Iterator接口和Enumeration接口的作用类似,在Java1.2中使用了Iterator代替了Enumeration
  • Enumeration的方法
              boolean hasMoreElements()
              E nextElement()
  • Iterator接口的方法
              hasNext(),判断是否有下一个元素
              next()方法用于得到下一个元素
              remove用于删除元素

7、HashSet类

  • 元素无序,值可以是null,主要方法:
  • (1)构造方法
                    public HashSet();
                    public HashSet(Collection<?extends E>c);
                    public HashSet(int initialCapacity);
                    public HashSet(int initialCapacity,float loadFactor);
  • (2)添加元素的方法
                    public boolean add(Object o),添加指定的元素
                    public boolean addAll(Collection c),添加多个
                    例如:set3.add("元素5");
  • (3)删除元素的方法
                    public boolean remove(Object o),删除一个
                    public boolean removeAll(Collection c);删除多个
                    public void clear(),删除所有元素
                    public boolean retainAll(Collection c),保留部分
                    例如:set1.remove("元素3")
  • (4)查找元素的方法
                    public boolean contains(Object o), 是否存在
  • (5)判断集合是否为空
                    public boolean isEmpty
  • (6)遍历集合的方法
                    public Iterator iterator(),转换成迭代器
                    public Object[] toArray(), 转换成集合
使用HashSet

8、TreeSet类

  • TreeSet能够对加入的元素进行排序
  • 构造方法:
                    public TreeSet(), 创建爱你一个空的集合,自然顺序
                    public TreeSet(Collection<? extends E> c)
                    public TreeSet(Collection<? super E> comparator)
                    public TreeSet(SortedSet<E> s)
  • TreeSet的多数方法与HashSet方法相同

9、ArrayList类

  • ArrayList是以数组方式实现的链表,是非同步的,构造方法有3种:
    • ArrayList(),构造一个初始化为10的空的链表
    • ArrayList(Collection<? extends E> c),使用1个已经存在的集合构造一个链表
    • ArrayList(int initialCapacity),指定初始化空间
    • 练习一下构造ArrayList对象
  • (1)向集合中添加对象的方法。
    • public void add(int index,Object o)
    • public boolean addAll(int index,Collection c)
    • public boolean add(Object o)
    • public boolean addAll(Collection c)
    • 例如:list1.add("user3");
  • (2)删除元素
    • public boolean remove(int index,Object o),删除指定元素
    • public boolean removeAll(Collection c),删除多个
    • public void clear(),删除所有
    • public boolean retainAll(Collection c),
    • public Object remove(int index)
  • (3)获取某个元素或者获取某些元素
    • public Object get(int index)
    • public List subList(int fromIndex,int toIndex)
  • (4)查找某个元素
    • public int indexOf(Object o)
    • public int lastIndexOf(Object o)
    • public boolean isEmpty()
    • public boolean contains(Object o)
    • public boolean containsAll(Collection c)
    • public int size()
  • (5)修改元素的方法
    • public Object set(int index,Object o)
  • (6)转换成其他对象
    • public ListIterator listIterator()
    • public ListIterator listIterator(int index)
    • public Iterator iterator()
    • public Object[] toArray()
  • (7)ArrayList的遍历
方法一:
for(int i = 0;i<list1.size();i++){
    System.out.println(lixt1.get(i));
}
方法二:
Object o[] = list1.toArray();
for(int i = 0;i<o.length;i++){
    String temp = (String)o[i];
    System.out.println(temp);
}
方法三:
Iterator<String> i = list1.iterator();
while(i.hasNext()){
    String temp = i.next();
    System.out.println(temp);
}
for(int i = 0;i<list1.size();i++    System.out.println(lixt1.get(iObject o[] = list1.toArrayfor(int i = 0;i<o.length;i++    String temp = (String)o[i    System.out.println(tempIterator<String> i = list1.iteratorwhile(i.hasNext    String temp = i.next()    System.out.println(temp实例:使用ArrayList实现学生信息管理系统

10、LinkedList类

  • LinkedList类的用法与ArrayList类似。ArrayList是采用数组方式实现的List,而LinkedList是采用链表方式实现List,前者采用连续存储空间,后者采用非连续存储空间。如果集合元素在生成后变化不大,使用ArrayList,如果数据经常发生变化,应该使用LinkedList。

11、Vector类

  • Vector类的用法与ArrayList非常类似。会随着元素的变化调整自身的容量。提供了4种与ArrayList类似的构造函数。
  • Vector也实现了List接口,和ArrayList的功能基本类似,采用数组来实现。不同的是Vector支持同步,在非多线程环境下面使用ArrayList。

12、Hashtable类

  • 实现了Map接口,是同步的哈希表,不允许类型为null的键和值。用于存储映射关系。
  • Hashtable中的常用方法都是继承自Map接口。

13、HashMap类

  • HashMap是基于Hash表的Map接口的实现,允许mull值和null键。与HashMap用法相同,只是HashMap不支持同步。HashMap不能保证元素的顺序。方法参见Map接口。
  • 第一种遍历方式:
Object[] o = map.entrySet().toArray();
Map.Entry x;
for(int i = 0;i<map.size();i++){
    x = (Map.Entry)o[i];
    Object key = x.getKey();
    Object value = x.getValue();
}
 
 
 
  • 第二种遍历方式:
Object[] o = map.entrySet().toArray();
for(int i = 0;i<map.size();i++){
    Object value = map.get(o[i]);
}
 

14、TreeMap类

  • TreeMap是按照树的方式组织数据,查询的速度比较快,在添加数据的时候会对数据进行排序,根据key的自然顺序排序,用法和HashMap类似。

15、Properties类

  • Properties类表示一组属性,Properties对象的属性信息可以写入到输出流,也可以从输入流加载。Properties中的key和value都是字符串。添加属性信息的时候应该使用setProperties方法
  • 主要方法如下:
    • public Enumeration<?>prooertyNames()
    • public synchronized void load(InputStream inStream) throws IOException
    • public synchronized Object setprooerty(String key,String value)
    • public void list(PrintStream out)
    • public void store(OutputStream out,String comments) throws IOException
    • public void store(Writer writer,String comments) throws IOException
  • Properties可以通过load和store方法从文件中加载属性或者把属性写入到文件中,属性文件的格式为:属性名=属性值

16、Comparable接口

  • 如果某个类型实现Comparable接口,就可以通过sort方法对数组排序了
  • Comparable接口定义了compareTo方法,参数另外一个要比较的对象
  • Comparable接口的使用

17、Comparator接口

  • Comparator接口表示比较器,例如要对教师对象进行排序,可以根据年龄排序,可以根据部门排序,可以根据入职时间排序,每一种排序方法都可以实现为一个比较器
  • 实现Comparator接口,需要实现compare方法,方法有两个参数,分别表示要比较的两个对象,方法的返回值是int
  • 例子:采用多种方式对学生进行排序

以上是关于Java集合框架的主要内容,如果未能解决你的问题,请参考以下文章

java集合框架代码演示demo

java集合框架代码演示demo

Java 集合框架

代码片段 - Golang 实现集合操作

laravel特殊功能代码片段集合

Java集合框架