java中的队列 集合 映射
从计算机的角度看,数据是所有能被输入到计算机中的,且能被计算机处理的符号的集合。它是计算机操作对象的统称。数据结构是指数据与数据之间的联系,可以看做是数据与数据之间存在某种关系的集合,数据结构包括一下几个方面:
(1):数据元素之间的逻辑关系,即数据的逻辑结构。
(2):数据元素在计算机中的存储方式,即数据的存储结构。
(3):施加在数据上的任何操作,在计算机中我们统称为运算(即数据的运算)(数据的运算包括:检索,插入,删除,更新,排序等)。
我们现在讲的队列,集合,映射是数据的常用的简单的存储结构。
1队列 (以ArrayList为例):它的特点是:线性的,有序的,长度可变的,有下表,可重复存放元素。画图板的保存可以用队列。有三种遍历方式。它的常用的方法add(添加元素),size(列表的长度)、isEmpty(判断是否为空)、get(有下表得到元素)、set(替换某位置上的元素(两个参数))、iterator (迭代器)和 contains(是否包含某个元素)。
2集合 (以HashSet为例):它的特点是;无序的,长度可变的,不可重复,无下表。由于他的不可重复性我们可以去掉某一队列中重复的元素。有两种遍历方式。他的常用方法add(添加元素),size(列表的长度)、isEmpty(判断是否为空),iterator (迭代器)contains(是否包含某个元素)。
例题:我们要将一个无序数组,去掉重复的元素后,排序。
思路:我们创建一个集合,然后我们把数组的元素放入到集合中,然后在取出集合中的元素,放入到一个数组,此时数组即为无重复的数组。然后再排序。
代码:
package netjava.txc.setjihe;
public class MyTest {
//定义一个数组
int a[]=new int[10];
// 程序入口
public static void main(String args[]){
//创建对象
MyTest txc = new MyTest();
int a[]= txc.createa(21);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
int b[]=new int[a.length];
System.out.println();
b=txc.quchong(a);
System.out.println();
int c[]=new int[b.length];
c=txc.sort(b);
for(int i=0;i<c.length;i++){
System.out.print(c[i]+"\t");
}
}
public int[] createa(int len){
//定义一个数组
int a[]=new int[len];
for(int i=0;i<a.length;i++){
//创建随机对象
java.util.Random an=new java.util.Random();
int txc=an.nextInt(20);
a[i]=txc;
}
return a;
}
public int [] quchong(int a[]){
//把数组 放入到 集合 中
java.util.HashSet<Integer> setn=new java.util.HashSet<Integer>();
for(int i=0;i<a.length;i++){
setn.add(a[i]);
}
//遍历 先得到迭代器
java.util.Iterator<Integer> iter =setn.iterator();
int d []=new int[setn.size()];
int i=0;
while(iter.hasNext()){
d[i]=iter.next();
// System.out.print("<>"+d[i]+"\t");
i++;
}
return d;
}
/**
* 排序的 方法
* @param a 要传入的 参数
* @return 返回一个数组
*/
public int[] sort(int a[]){
//排序 用冒泡
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
return a;
}
}
3 映射(以HashMap为例):它的特点是:首先是一个K <--->V ,K是一个Set集合(不可重复,无序的),每一个K都对应一个K,如果加入相同的键值时,则会替换已经存在的键值队。containsKey(Object key)判断该映射是否包含对应的键值。containsValue(Object value) 判断该映射是否包含 由键 映射得到的值。get(Object key) 返回该值(由键 映射得到的值)。isEmpty()判断是否为空,
put(K key, V value)加入一对键值。size()键值的对数。场景:在学校中一个学号对应一个学生及他的相关信息,在一个国家中一个身份证对应一个公民及他的相关信息。
例题:统计一个数组中每一个元素的次数。
思路:遍历数组,对他的每一个元素我们用 映射的containsKey(Object key),如果存在该元素我们取出该元素在映射的值 并加以放到映射中,如果不存在我们将value 赋值1,加到映射中。
<!--EndFragment-->
Java代码
package netjava.txc.setjihe;
import java.util.HashMap;
public class MinTest {
//定义一个数组
int a[]=new int[10];
// 程序入口
public static void main(String args[]){
//创建对象
MyTest txc = new MyTest();
int a[]= txc.createa(21);
for(int i=0;i<a.length;i++){
// System.out.print(a[i]+"\t");
}
System.out.println();
//创建 对象
MinTest min=new MinTest();
HashMap<Integer, Integer> map= min.time(a);
// java.util.HashMap<Integer, Integer> maps= new java.util.HashMap<Integer, Integer>();
//遍历
//得到 k的集合
java.util.Set<Integer> se= map.keySet();
//得到迭代器
java.util.Iterator<Integer> iter =se.iterator();
while(iter.hasNext()){
//取出 一个 k
int num =iter.next();
//取出相应的 v
int v =map.get(num);
System.out.println(num+"\t"+v);
}
}
public int[] createa(int len){
//定义一个数组
int a[]=new int[len];
for(int i=0;i<a.length;i++){
//创建随机对象
java.util.Random an=new java.util.Random();
int txc=an.nextInt(20);
a[i]=txc;
}
return a;
}
public HashMap<Integer, Integer> time(int a[]){
HashMap<Integer, Integer> map =new HashMap<Integer, Integer>();
for(int i=0;i<a.length;i++){
if(map.containsKey(a[i])){
int v=map.get(a[1])+1;
map.put(a[i], v);
}else{
map.put(a[i],1);
}
}
return map;
}
}
<!--EndFragment-->