从入门到放弃的第三周(a'pi)......day.13.。。。。。LinkedList,Set接口: Collections,提供若干的针对集合操作方法;
1,LinkedList
使用双向循环链表实现
ArrayList,LinkedList与Vector的区别?
ArrayList和Vector都是使用数组存储,LinkedList使用双向循环链表实现
查询时ArrayList和Vector快,数据增加和删除LinkedList快
ArrayList是线程不安全,Vector线程安全(JDK1.5提供了用于并发的API)
2,Set接口:
不可重复,不保证顺序
HashSet:判断元素是否重复,取决于元素的equlas和hashCode
TreeSet:保证顺序,依据:1,元素实现了Comparable接口 2,构造方法传入Comparator
3,Map接口:存储键值对
HashMap:键是否重复取决于键的equlas和hashCode
put(k,v)
v get(k)
Collection values()
Set keySet()
Set<Map.Entry<K,V>> entrySet()
Hashtable
Properties
4, Collections,提供若干的针对集合操作方法
任务:
1,现在有一个map集合如下:
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王麻子");
map.put(4, "老谭");
要求:
1.遍历集合,并将序号与对应人名打印。
2.向该map集合中插入一个编码为5姓名为"蜗牛学院"的信息
3.移除该map中的编号为4的信息
4.将map集合中编号为3的姓名信息修改为"王五"
public class job {
public static void main(String[] args){
Map<Integer,String> map=new HashMap<>();
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王麻子");
map.put(4, "老谭");
//1,
Set<Map.Entry<Integer, String>> set=map.entrySet();
for (Entry<Integer, String> entry : set) {
System.out.println(entry);
}
//2,
map.put(5, "woniu");
//3,
map.remove(4);
//4
map.put(3, "王五");
for (Entry<Integer, String> entry : set) {
System.out.println(entry);
}
}}
2,随机产生1000个1-10之间的整数,统计其出现的次数
public class Job2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<Integer,Integer> map=new HashMap<>();
int[] z=new int[10];
for(int i=0;i<10;i++){
z[i]=0;
}
for(int i=0;i<1000;i++){
int x=(int)(Math.random()*10+1);
map.put(x,z[x-1]++);
}
Set<Entry<Integer, Integer>> set=map.entrySet();
for (Entry<Integer, Integer> entry : set) {
System.out.println(entry);
}
}
}
3,从键盘输入若干用户的姓名,按照姓氏统计人数
public class job3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,Integer> map=new HashMap<>();
Set<String> keys = map.keySet();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("请输入姓名");
String name=scanner.next();
String x=name.substring(0, 1);
if(!(keys.contains(x))){
map.put(x, 1);
}else{
map.put(x, map.get(x)+1);
}
Set<Entry<String, Integer>> set=map.entrySet();
for (Entry<String, Integer> entry : set) {
System.out.println(entry);
}
}
}
}
4 ,定义一个泛型为String类型的List集合,统计该集合中每个字符(注意,不是字符串)出现的次数。例如:集合中有”abc”、”bcd”两个元素,程序最终输出结果为:“a = 1,b = 2,c = 2,d = 1”
public class Job4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list=new ArrayList<>();
Map<String,Integer> map=new HashMap<>();
Set<String> keys = map.keySet();
list.add("abc");
list.add("ca");
for(int i=0;i<list.size();i++){
int a=0;
int b=1;
for(int j=0;j<list.get(i).length();j++){
String string=list.get(i).substring(a++, b++);
System.out.println(string);
if(!(keys.contains(string))){
map.put(string, 1);
}else{
map.put(string, map.get(string)+1);
}
} }
Set<Entry<String, Integer>> set=map.entrySet();
for (Entry<String, Integer> entry : set) {
System.out.println(entry);
}
}
}
5,
1.地铁站编号和站名对应关系如下:
1=天府广场
2=省体育馆
3=倪家桥
4=火车南站
5=孵化园
6=世纪城
7=天府三街
8=天府五街
//....
将以上对应关系的数据存储到map集合中,key:表示站编号,value:表示站名,并遍历打印(可以不按顺序打印):
2.计算地铁票价规则:
总行程 3站内(包含3站)收费3元,
3站以上但不超过5站(包含5站)的收费4元,
5站以上的,在4元的基础上,每多1站增加2元,
10元封顶;
3.打印格式(需要对键盘录入的上车站和到达站进行判断,如果没有该站,提示重新输入,直到站名存在为止):
注意:每站需要2分钟
请输入上车站:
您输入的上车站:科技馆 不存在,请重新输入上车站:
天府广场
请输入到达站:
您输入的到达站:科技馆 不存在,请重新输入到达站:
孵化园
从天府广场到孵化园共经过4站收费4元,大约需要 8分钟

浙公网安备 33010602011771号