JAVA集合框架

来源:互联网 发布:大数据思维 编辑:程序博客网 时间:2024/06/06 01:45

java 集合框架概述

Java集合框架是一套用来创建集合类(collection)的泛型,集合类提供了多种方式用于存储和管理内存中任意类型的对象。集合类是以诸如链表或者堆栈之类的方式组织一套给定类型的对象的类。其主要功能就是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架。

Java集合框架根据集合类中是否支持重复元素,元素是否有顺序,以及是否添加null元素,将对象的存储方式分为三种类型,分别是:

1).Set():对象容器中的对象没有顺序,切不能重复。接口中最常用的实现类是ArrayList和LinkedList类。

2).List(列表):对象容器中的对象按照索引顺序排序,而且可以有重复的对象。

3).Map(映射):对象容器中的元素包含一对键值对,其中键对象不能重复,值对象可以重复。

Collection接口

Collection接口中定义了Collection对象共有的一些基本方法是集合层次中的根接口,JDK没有提供这个接口直接的实现类

int.size() 返回当前集合中包含的元素个数

isEmpty() 判断集合中是否有元素

boolean contains(Objact obj) 判断集合元素中是否含有某一指定元素

add(Objact obj) 向集合中添加某一个元素

remove(Objact obj) 从集合中删除某一元素

Iterator iterator() 返回一个遍历器,用来访问集合中的各个元素

Iterator接口

Iterator接口是一种用于遍历集合的接口

hashNext() 如果集合中还有更多元素,该方法返回ture

next() 返回集合中的下一个元素

remove() 删除Iterator返回的最后一个元素

1.List接口

List接口继承Connection接口,扩展了Connection并声明存储一系列元素的类集的特性。使用一个基于零的下标,元素可以通过他们在列表中的位置被插入和访问。常用的实现类是ArrayList和LinkedList。

特点是:

1),List中的元素是有序的

2),List通常允许重复元素

3),List实现类通常支持null元素

4),可以通过索引访问List对象容器中的元素。

(1)ArrayList示例

import java.util.ArrayList;import java.util.List;public class ArrayListDemo{public static void main(String[] args){List<Object> list = new ArrayList<Object>();list.add("nihao");list.add(2);list.add(false);list.add(1,"wangwu");list.remove(2);list.set(0,"zhangsan");for(int i = 0;i < list.size();i++){System.out.println(list.get(i));}}}

Object 类定义的equals()方法只有在传递给该方法的对象是同一对象的时候,才会返回true。可以通过重写equals()方法来把具有相同状态的两个对象看做是同一对象。

(2)LinkedList

void addFirst  在链表开头添加一个对象

void addLast  在链表末尾添加一个对象

getFirst()  返回链表中的第一个元素

getLast()  返回链表中的最后一个元素

removeFirst()  删除链表中的第一个元素

removeLast()  删除链表中的最后一个元素

程序示例

import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args){LinkedList<Object> link = new LinkedList<Object>();link.add("hellow");link.add("haha");link.addFirst(3);link.addLast(5);System.out.println(link.getFirst());System.out.println(link.getLast());link.removeFirst();link.removeLast();for(int i = 0;i < link.size();i++){System.out.println(link.get(i));}}}


LinkedList与ArrayList的区别

如果列表需要快速存取,但不经常进行元素的插入和删除操作,那么选择ArrayList会好一些,如果需要对列表进行频繁的插入和删除操作,那么久应该选择LinkedList。

2.Set接口

Set接口继承Collection接口,同时也继承了Collection接口的全部方法。不能复制元素的类集的特性,因此,如果试图将复制元素加到集合中时,add()方法将返回false。实现Set接口最常用的是HashSet和TreeSet

Set接口的特点

1),Set类型的容器中不能包含重复元素,当加入一个元素到容器中时,要比较元素的内容是否重复,所以加入set类型对象容器的对象必须重写equals()方法

2),元素可能有顺序,也可能没有顺序

3),因为元素可能没有顺序,所以不能基于下标访问set中的元素

(1)HashSet

HashSet是基于哈希算法的Set接口实现,它主要有以下几个特点:

   1)当遍历HashSet时,其中的元素是没有顺序的。

   2)HashSet是不允许出现重复元素的,这里的重复元素是指有相同的哈希码,并且用equals()方法进行比较时,返回true的两个对象

    3)允许包含null元素

如果我们编写的类重新定义了equals()方法,那么这个类也必须重新定义hashCode()方法,并且保证当两个对象用equals()方法比较结果为true时,这两个对象的hashCode()方法的返回值相等。

程序示例

import java.util.HashSet;import java.util.Set;public class HashSetDemo {public static void main(String[] args){Set<String> set = new HashSet<String>();set.add("nihao");set.add("henhao");set.add("haha");set.add("heihei");for(String string : set){System.out.println(string);}}}
(2)TreeSet

TreeSet类不仅实现类set接口,还实现了SortedSet接口,从而保证集合中的对象按照一定的顺序排列。当向TreeSet集合中添加一个对象时,会把它插入到有序的对象序列中,但是这种排序并不是按照对象添加的顺序序列,而是按照一定的算法来排序。

TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。TreeSet支持自然排序和自定义排序两种排序方式。

TreeSet集中对象按照升序排列的集,这意味着从TreeSet对象获取的迭代器都能提供升序的排列顺序。

3.Map接口

Map(映射)接口是Java集合框架中不同于Collection接口的另一个重要的接口,它对应的是在一种从键(key)到值(value)的对应关系的集合,Map类型的对象容器里保存着两组对象,一组对象用于保存Value,另一组对象用于保存Map里的key。key和value可以升级任何引用类型的数据,key不能重复,但value可以重复。

(1) HashMap

HashMap是基于哈希算法的Map接口的实现,HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是HashMap并不保证键以特定顺序排序,特别是不保证顺序永久不变。HashMap实现了Map接口,从而具有接口的所有方法。

程序示例

import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class HashMapDemo {public static void main(String[] args){Map<String,String> map = new HashMap<String, String>();map.put("a","ni");map.put("b","hao");map.put("c","shi");map.put("d","jie");//使用Iterator遍历建和值Set<String> keys = map.keySet();for(Iterator <String>  iterator = keys.iterator();iterator.hasNext();){String key = iterator.next();String value = map.get(key);System.out.println("未删除的键值对是:"+key+"===="+value);}map.remove("d");for(Iterator <String>  iterator = keys.iterator();iterator.hasNext();){String key = iterator.next();String value = map.get(key);System.out.println("删除后的键值对是:"+key+"===="+value);}}}
(2) TreeMap

TreeMap类是基于红黑树算法的Map接口实现。TreeMap中的键存放方式与TreeSet相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列

import java.util.HashMap;import java.util.Map;import java.util.Set;public class TreeMapDemo {public static void main(String[] args){Map<Integer,String> map = new HashMap<Integer, String>();map.put(1,"ni");map.put(2,"hao");map.put(3,"shi");map.put(4,"jie");Set<Integer> keys = map.keySet();for(Object key : keys){String value = map.get(key);System.out.println("未删除的键值对是:"+key+"===="+value);}map.remove(4);for(Object key : keys){String value = map.get(key);System.out.println("删除后的键值对是:"+key+"===="+value);}}}






0 0