Java 中集合类定义主要在java.util.*包下面,常用的为以下三种:
一.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
实现类-----》HashSet :此类实现 Set 接口,由哈希表支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类为基本操作提供了稳定性能。在此类中即使我们放入的元素是有序的,但打印出来的会是无序的(hash 存储的结果),所以对于数据的提取不能通过下标直接进行操作,而必须通过迭代器java.util.Iterator进行操作,该类下有以下两个主方法:
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
同时也正是因为这样所以此类存储不允许存储相同的对象,当有两个或两个以上相同存储对象出现时,此类对象只会存储第一个,后来者则不会存储,所以利用这个特性,可以很容易排除掉相同的数据,以节省空间。
实例1:通过HashSet对象实现对数组数据进行去重复操作:
二.List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,即以线性的存储元素,不会重新排列。
实现类-----》ArrayList:实现了List 接口所有可选列表操作。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。其实就相当于一个数组,只不过大小是可变的,因为是线性存储的,所以对于数据的插入和提取将非常方便:
实例2:实现学生信息的有序存储,这样也很方便像数组一样直接可以进行下标运算
三.Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制
实现类-----》 HashMap:基于哈希表的 Map 接口的实现。就是我们在数学中学的映射,一个原象对应一个象,因为两个不同原象可以有相同的象,所以属于满射。向HashMap实例对象添加数据时需要,有两个数据一个是key,另一个是value,但每个key都不能一样,如果有两个或两个以上数据中的key是相同的,只会以最后一个为准,就像QQ账号(key)改密码(value)。 Map实现一对一,所以方便管理数据,就像学校管理学生一样,每个人都有一个学号,找到你只是一秒钟的事
实例3:用hashmap实现重复数据的统计
一.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
实现类-----》HashSet :此类实现 Set 接口,由哈希表支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类为基本操作提供了稳定性能。在此类中即使我们放入的元素是有序的,但打印出来的会是无序的(hash 存储的结果),所以对于数据的提取不能通过下标直接进行操作,而必须通过迭代器java.util.Iterator进行操作,该类下有以下两个主方法:
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
同时也正是因为这样所以此类存储不允许存储相同的对象,当有两个或两个以上相同存储对象出现时,此类对象只会存储第一个,后来者则不会存储,所以利用这个特性,可以很容易排除掉相同的数据,以节省空间。
实例1:通过HashSet对象实现对数组数据进行去重复操作:
/**
* 进行去重复操作
* @param array
* @return
*/
//int[] arr = set.toArray(new int[0]);
public int[] Unrepeat(int[] array){
/*定义一个set ,借用set 的不可重复的特点*/
java.util.Set<Integer> set = new HashSet<Integer>();
for(int i=0;i<array.length;i++){
set.add(array[i]);
}
/*以set的长度定义一个新的数组*/
int []arr = new int[set.size()];
/*进行set的遍历,并给数组赋值*/
int j=0;
for(int temp:set){
arr[j++]=temp;
}
/*返回经过去重复操作后的数组*/
return arr;
}
二.List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,即以线性的存储元素,不会重新排列。
实现类-----》ArrayList:实现了List 接口所有可选列表操作。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。其实就相当于一个数组,只不过大小是可变的,因为是线性存储的,所以对于数据的插入和提取将非常方便:
实例2:实现学生信息的有序存储,这样也很方便像数组一样直接可以进行下标运算
public List<Student> getUsers(int count){
List<Student> list = new ArrayList<Student>();
//List<Student> list = new ArrayDeque<Student>();
for(int i=0;i<count;i++){
Student student = new Student(i+1);
list.add(student);
}
return list;
}
三.Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制
实现类-----》 HashMap:基于哈希表的 Map 接口的实现。就是我们在数学中学的映射,一个原象对应一个象,因为两个不同原象可以有相同的象,所以属于满射。向HashMap实例对象添加数据时需要,有两个数据一个是key,另一个是value,但每个key都不能一样,如果有两个或两个以上数据中的key是相同的,只会以最后一个为准,就像QQ账号(key)改密码(value)。 Map实现一对一,所以方便管理数据,就像学校管理学生一样,每个人都有一个学号,找到你只是一秒钟的事
实例3:用hashmap实现重复数据的统计
public HashMap<Integer, Integer> CountNum(int[] array){
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<array.length;i++)
{
if(map.containsKey(array[i])){
int value = map.get(array[i])+1;
map.put(array[i], value);
}
else{
map.put(array[i],1);
}
}
return map;
}
1511

被折叠的 条评论
为什么被折叠?



