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分钟