集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。今天我们主要学习了3中集合框架结构:即ArrayList,HashSet和HashMap.
1.List接口(即ArrayList)
List提供的是一个相对有序的集合,集合的长度可以自行改变,并且允许元素的重复
ArrayList特点:线性,有序,长度可变,有下标。
以下是ArrayList的实现及遍历
2.Set接口(即HashSet)
Set接口提供的是一个无序的集合,他的对象不按特定的方式来排序,而仅仅是简单的将对象加入集合,所以它不允许重复对象的出现
HashSet特点:无序,长度可变,不可重复
以下是HashSet的实现及遍历
3.Map接口(HashMap)
Map提供的是一个映射的对应关系的集合,由一对对键值对组成,其中key值不能重复,而value可以。且当输入的有相同的key时,会进行替换
HashMap特点:无序,key不可重复
以下是HashMap的实现及遍历
以下是关于用集合框架结构解决的小问题,分别是去重复排序和统计重复次数
1去重复排序的类
2统计重复字数的类
3测试类
答案为
1 2 5 9 25 34 37 7
-----------------------
34 2
1 1
2 1
5 2
37 1
76 1
25 1
9 1
1.List接口(即ArrayList)
List提供的是一个相对有序的集合,集合的长度可以自行改变,并且允许元素的重复
ArrayList特点:线性,有序,长度可变,有下标。
以下是ArrayList的实现及遍历
public static void main(String args[]) {
// 创建一个ArrayList对象
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
// 装入10个数据
for (int i = 0; i < 10; i++) {
String s = "元素" + i;
list.add(s);
}
// 第一种遍历法:使用其本身的方法
for (int i = 0; i < list.size(); i++) {
// 根据下标取出元素并装入
String str = list.get(i);
System.out.print(str + "\t");
}
System.out.println();
// 第二种遍历法:使用迭代器
java.util.Iterator<String> iter = list.iterator();
// 判断是否有元素
while (iter.hasNext()) {
// 取出一个元素
String str = iter.next();
System.out.print(str + "\t");
}
System.out.println();
// 第三种遍历法:增强for型循环
for (String str : list) {
System.out.print(str + "\t");
}
}
2.Set接口(即HashSet)
Set接口提供的是一个无序的集合,他的对象不按特定的方式来排序,而仅仅是简单的将对象加入集合,所以它不允许重复对象的出现
HashSet特点:无序,长度可变,不可重复
以下是HashSet的实现及遍历
public static void main(String[] args) {
// 创建一个HashSet对象
java.util.HashSet<String> sets = new java.util.HashSet<String>();
// 装入10个数据
for (int i = 0; i < 10; i++) {
String s = "元素" + i;
sets.add(s);
}
//输入重复的元素,用于检验他的不可重复性,并用add()方法的返回值来观察是否装入了重复的元素
boolean b = sets.add("元素2");
boolean b1 = sets.add("元素10");
System.out.println(b + "<>" + b1);
//第一种遍历法:使用迭代器
java.util.Iterator<String> iter = sets.iterator();
while (iter.hasNext()) {
String str = iter.next();
System.out.print(str + "\t");
}
System.out.println();
// 第二种遍历法:增强for循环
for(String str:sets){
System.out.print(str+"\t");
}
}
3.Map接口(HashMap)
Map提供的是一个映射的对应关系的集合,由一对对键值对组成,其中key值不能重复,而value可以。且当输入的有相同的key时,会进行替换
HashMap特点:无序,key不可重复
以下是HashMap的实现及遍历
// 创建一个HashMap对象
java.util.HashMap<Integer, String> maps = new java.util.HashMap<Integer, String>();
// 装入一个键值对
for (int i = 0; i < 10; i++) {
int num = i;
String name = "学生" + i;
maps.put(num, name);
}
//增加一个键值对,加入K相同的键值对,则会替换已经存在的键值对
maps.put(10, "学生5");
maps.put(4, "新学生");
//遍历 方法:迭代器
//得到K的Set集合
java.util.Set<Integer> set = maps.keySet();
//遍历K的集合,得到set的迭代器
java.util.Iterator<Integer> iter = set.iterator();
while(iter.hasNext()){
//取出一个key
int num = iter.next();
//根据key得到对应的Value
String name = maps.get(num);
System.out.println(num+"\t"+name);
}
}
以下是关于用集合框架结构解决的小问题,分别是去重复排序和统计重复次数
1去重复排序的类
public class uniqueorder {
int i = 0;
int[] orderarray = new int[i];
//用于添加数组元素的方法
public void add(int a){
int[] addarray = new int[i+1];
for(int j=0;j<i;j++){
addarray[j]=orderarray[j];
}
addarray[i] = a;
orderarray = addarray;
i++;
}
//操作数组使其去重复并排序,并返回现有的数组大小
public int operate(){
int j=0;
//创建set对象(即去重复)
java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
for(int a=0;a<i;a++){
hset.add(orderarray[a]);
}
//创建迭代器对象遍历(将去重复后的数组赋予orderarray)
java.util.Iterator<Integer> iter = hset.iterator();
while(iter.hasNext()){
int k = iter.next();
int[] iterarray = new int[j+1];
for(int a=0;a<j;a++){
iterarray[a]=orderarray[a];
}
iterarray[j] = k;
orderarray =iterarray;
j++;
}
//排序过程(冒泡法)
for(int a=0;a<j;a++){
for(int b=j-1;b>a;b--){
if(orderarray[b]<orderarray[b-1]){
int temp=orderarray[b-1];
orderarray[b-1]=orderarray[b];
orderarray[b]=temp;
}
}
}
return j;
}
//依照给出的下标弹出数组中元素的方法(从数组开始到数组末尾)
public int pop(int index){
int v=orderarray[index];
return v;
}
}
2统计重复字数的类
public class countrepeat {
int i = 0;
int[] orderarray = new int[i];
//用于添加数组元素的方法
public void add(int a){
int[] addarray = new int[i+1];
for(int j=0;j<i;j++){
addarray[j]=orderarray[j];
}
addarray[i] = a;
orderarray = addarray;
i++;
}
//操作数组统计重复的元素数并遍历显示
public void operate(){
//创建hashmap对象
java.util.HashMap<Integer, Integer> hmap = new java.util.HashMap<Integer, Integer>();
//创建set对象(即去重复)
java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
for(int a=0;a<i;a++){
hset.add(orderarray[a]);
if(!hmap.containsKey(orderarray[a])){
hmap.put(orderarray[a], 1);
}else if(hmap.containsKey(orderarray[a])){
int v=hmap.get(orderarray[a])+1;
hmap.put(orderarray[a], v);
}
}
//创建迭代器对象遍历
java.util.Iterator<Integer> iter = hset.iterator();
while(iter.hasNext()){
int k = iter.next();
int v = hmap.get(k);
System.out.println(k+"\t"+v);
}
}
}
3测试类
public static void main(String[] args) {
//给予一个数组
int[] testarray = {2,34,5,25,1,34,5,76,37,9};
//创建对象
uniqueorder uo = new uniqueorder();
countrepeat cr = new countrepeat();
//将数组装入
for(int i=0;i<10;i++){
uo.add(testarray[i]);
cr.add(testarray[i]);
}
int k=uo.operate();
for(int i=0;i<k;i++){
System.out.print(uo.pop(i)+"\t");
}
System.out.println();
System.out.println("-----------------------");
cr.operate();
}
答案为
1 2 5 9 25 34 37 7
-----------------------
34 2
1 1
2 1
5 2
37 1
76 1
25 1
9 1