集合(Set),队列(List),映射(Map)三种接口的操作相似都有以下三个步骤:创建一个对象、装入数据、遍历、
但三者操作特点上又有所不同,因此适用场景不一样。
队列的操作特点:线性的,有序的,长度可变的,有下标的,可存放重复元素。用于数组元素查询、删除、添加等的操作
public class ArrayListTest {
public static void main(String args[]) {
// 创建一个队列对象
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
// 装入10个数据
for (int i = 0; i < 10; i++) {
String s = "元素" + i;
//加元素
list.add(s);
}
//因为队列是有序的,所以三种遍历队列的方法都可以
// 遍历1
for (int i = 0; i < list.size(); i++) {
// 根据下标取出一个元素
String str = list.get(i);
System.out.print(str+"\t");
}
System.out.println();
//遍历2
//得到队列的迭代器对象
java.util.Iterator<String> iter = list.iterator();
//判断是否有数据可以迭代
while(iter.hasNext()){
//取出一个元素
String str = iter.next();
System.out.print(str+"\t");
}
System.out.println();
//遍历3
for(String str:list){
System.out.print(str+"\t");
}
}
2、集合操作特点:无序的,长度可变的,不可重复的。可用于去重复的数组
3、映射操作类
特点:是一个K<--->V
K是一个Set集合,是不可重复的,无序的
每一个K都对应一个V
如果加入K相同的键值对,则会替换已经存在的键值对
因为集合与映射都是无序操作,所以不能根据索引取元素,只能通过迭代器遍历
可用于统计数组元素出现的次数
以集合中的HashSet和映射中的HashMap举例
import java.util.Collection;
import java.util.HashMap;
/**
* 给定任意一个int[],去重复排序,用到java.util.Set接口实现类
*
* @author Administrator
*
*/
public class ArrayList {
/**
* 去重复
*/
public Object[] test(int[] array) {
//创建一个容器对象
java.util.HashSet<Integer> sets = new java.util.HashSet<Integer>();
//遍历数组,将给定的一个元素有重复的int[]数组添加到集合中去,得到的是无重复的集合
for (int i = 0; i < array.length; i++) {
sets.add(array[i]);
}
//取出Set中的元素
//Set是无序的,所以不能根据索引取,得到Set的迭代器
java.util.Iterator<Integer> it=sets.iterator();
int i=0;
//创建一个与集合长度一致的数组
int[] arr=new int[sets.size()];
//遍历集合,将集合中的元素添加到新建的数组中
while(it.hasNext()){
arr[i]=it.next();
//输出数组中元素
System.out.print(arr[i]+"\t");
}
//返回数组
return arr;
}
/**
* 冒泡排序
*/
public static int[] maoPao(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if (arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
System.out.println(arr[i]+"\t");
}
}
}
return arr;
}
/**
* 给定任意一个int[],统计元素个数,用java.util.HashMap接口实现类
* @param args
*/
public HashMap<Integer,Integer> count(int[] array){
//创建一个容器对象
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
//遍历任意给定的数组int[],取得数组中的元素
for(int i=0;i<array.length;i++){
//将数组中取出的元素与map中元素对比,若映射中已存在此元素,此元素就不用再添加入映射中,
//只将映射中元素对应的value值加1即可
if(map.containsKey(array[i])){
int value=map.get(array[i])+1;
map.put(array[i], value);
//否则在映射中添加此元素,同时将value的值设置为1
}else{
map.put(array[i], 1);
}
}
return map;
}
//打印map中的内容
public void printMap(HashMap<Integer,Integer> um){
//得到map中所有key的集合
java.util.Set<Integer> set=um.keySet();
//创建key的迭代器
java.util.Iterator<Integer> it=set.iterator();
//迭代key
while(it.hasNext()){
Integer key=it.next();
//取出key对应的value值
Integer value=um.get(key);
System.out.println("元素"+key+"\t"+value);
}
}
public static void main(String[] args){
int[] array={1,2,2,5,5,5,6,8,8,9};
ArrayList a=new ArrayList();
a.test(array);
System.out.println();
HashMap<Integer,Integer> hash=a.count(array);
a.printMap(hash);
}
}
但三者操作特点上又有所不同,因此适用场景不一样。
队列的操作特点:线性的,有序的,长度可变的,有下标的,可存放重复元素。用于数组元素查询、删除、添加等的操作
public class ArrayListTest {
public static void main(String args[]) {
// 创建一个队列对象
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
// 装入10个数据
for (int i = 0; i < 10; i++) {
String s = "元素" + i;
//加元素
list.add(s);
}
//因为队列是有序的,所以三种遍历队列的方法都可以
// 遍历1
for (int i = 0; i < list.size(); i++) {
// 根据下标取出一个元素
String str = list.get(i);
System.out.print(str+"\t");
}
System.out.println();
//遍历2
//得到队列的迭代器对象
java.util.Iterator<String> iter = list.iterator();
//判断是否有数据可以迭代
while(iter.hasNext()){
//取出一个元素
String str = iter.next();
System.out.print(str+"\t");
}
System.out.println();
//遍历3
for(String str:list){
System.out.print(str+"\t");
}
}
2、集合操作特点:无序的,长度可变的,不可重复的。可用于去重复的数组
3、映射操作类
特点:是一个K<--->V
K是一个Set集合,是不可重复的,无序的
每一个K都对应一个V
如果加入K相同的键值对,则会替换已经存在的键值对
因为集合与映射都是无序操作,所以不能根据索引取元素,只能通过迭代器遍历
可用于统计数组元素出现的次数
以集合中的HashSet和映射中的HashMap举例
import java.util.Collection;
import java.util.HashMap;
/**
* 给定任意一个int[],去重复排序,用到java.util.Set接口实现类
*
* @author Administrator
*
*/
public class ArrayList {
/**
* 去重复
*/
public Object[] test(int[] array) {
//创建一个容器对象
java.util.HashSet<Integer> sets = new java.util.HashSet<Integer>();
//遍历数组,将给定的一个元素有重复的int[]数组添加到集合中去,得到的是无重复的集合
for (int i = 0; i < array.length; i++) {
sets.add(array[i]);
}
//取出Set中的元素
//Set是无序的,所以不能根据索引取,得到Set的迭代器
java.util.Iterator<Integer> it=sets.iterator();
int i=0;
//创建一个与集合长度一致的数组
int[] arr=new int[sets.size()];
//遍历集合,将集合中的元素添加到新建的数组中
while(it.hasNext()){
arr[i]=it.next();
//输出数组中元素
System.out.print(arr[i]+"\t");
}
//返回数组
return arr;
}
/**
* 冒泡排序
*/
public static int[] maoPao(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if (arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
System.out.println(arr[i]+"\t");
}
}
}
return arr;
}
/**
* 给定任意一个int[],统计元素个数,用java.util.HashMap接口实现类
* @param args
*/
public HashMap<Integer,Integer> count(int[] array){
//创建一个容器对象
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
//遍历任意给定的数组int[],取得数组中的元素
for(int i=0;i<array.length;i++){
//将数组中取出的元素与map中元素对比,若映射中已存在此元素,此元素就不用再添加入映射中,
//只将映射中元素对应的value值加1即可
if(map.containsKey(array[i])){
int value=map.get(array[i])+1;
map.put(array[i], value);
//否则在映射中添加此元素,同时将value的值设置为1
}else{
map.put(array[i], 1);
}
}
return map;
}
//打印map中的内容
public void printMap(HashMap<Integer,Integer> um){
//得到map中所有key的集合
java.util.Set<Integer> set=um.keySet();
//创建key的迭代器
java.util.Iterator<Integer> it=set.iterator();
//迭代key
while(it.hasNext()){
Integer key=it.next();
//取出key对应的value值
Integer value=um.get(key);
System.out.println("元素"+key+"\t"+value);
}
}
public static void main(String[] args){
int[] array={1,2,2,5,5,5,6,8,8,9};
ArrayList a=new ArrayList();
a.test(array);
System.out.println();
HashMap<Integer,Integer> hash=a.count(array);
a.printMap(hash);
}
}