技术帮
 

集合练习题

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

感觉很多新人都不知道怎么学习软件开发,个人感觉还是因为练习做的太少,软件开发知识想看懂太难了,必须是边读资料边动手练习。莫说是新人,Java老人研究新技术的时候也是边读资料边练习。因此整理和编排了一系列的练习题,希望对新人学习有帮助。


基础练习题

1473058358717068189.png List初体验

* 创建一个ArrayList对象lst

* 向lst中增加河北省的各市的名称

* 输出lst中包含的城市数量

* 判断lst中是否存在衡水市

* 判断lst中是否存在天水市

* 将索引为0的市移除

* 讲索引为1的市替换为张家界市

* 输出石家庄所在的索引位置

* 清空lst的所有元素

* 判断lst中是否包含元素


 LinkedList初体验

* 使用LinkedList存储河北省各城市的城市名称

* 使用addFirst在第一个位置插入:洛阳市

* 使用addLast在最后一个位置插入:开封市

* 体验getLast、getFirst、removeLast、removeFirts,分别打印输出城市列表。


 HashSet初体验

* 使用HashSet存储各种野生动物的名字,要求达到10个动物

* 循环打印输入动物的名字,看看动物名字的顺序

* 判断是否存在猎豹

* 移除动物鸵鸟,并打印现有动物名字

* 移除全部动物,并打印现有动物名字

* 判断是否HashSet中是否为空


 Iteractor初体验

* 在ArrayList中存储各种动物的名字;

* 循环打印输入动物的名字

* 在HashSet中存储各种动物的名字;

* 循环打印动物的名字

* 在HashMap中存储班级人员姓名和电话号码;

* 打印输出班级人员通讯录

 对象比较和排序

* 定义动物类,实现Comparable接口,定义名字和最长寿命。比如:乌龟 500

* 比较乌龟和兔子谁的寿命长。

* 定义ArrayList anims,存储若干野生动物的名字和最长寿命。

* 打印输入;

* 按照最长寿命进行排序;

* 打印输出;


进阶练习题

1473058358717068189.png 两个水果筐

本题体验Collection接口、List接口、ArrayList类,以及Collection的add和addAll方法。

        // 定义三个水果字符串
		String shuiguo1="苹果";
		String shuiguo2="橘子";
		String shuiguo3="香蕉";
		
		// 定义了一个筐
		Collection<String> kuang1=new ArrayList<String>();
		kuang1.add(shuiguo1);
		kuang1.add(shuiguo2);
		kuang1.add(shuiguo3);
		
		System.out.println("第一个筐子里面总共有:"+kuang1.size()+"个水果");
		
		kuang1.add(shuiguo1);
		System.out.println("现在第一个筐子里面有"+kuang1.size()+"个水果");
		
		// 定义了第二个筐
		Collection<String> kuang2=new ArrayList<String>();
		kuang2.addAll(kuang1);
		System.out.println("第二个筐子里面有"+kuang2.size()+"个水果");
		kuang2.remove(shuiguo1);
		
		System.out.println("打印第一个筐子里面的水果:");
		for(String s:kuang1){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		System.out.println("打印第二个筐子里面的水果:");
		for(String s:kuang2){
			System.out.print(s+"\t");
		}
		System.out.println();		


以水果Bean方式测试:

public class TestMain {
	
	public static void main(String[] args) {
		
		// 定义三个水果字符串
		ShuiGuo shuiguo1=new ShuiGuo("苹果","红色");
		ShuiGuo shuiguo2=new ShuiGuo("橘子","橙色");
		ShuiGuo shuiguo3=new ShuiGuo("香蕉","黄色");
		
		// 定义了一个筐
		Collection<ShuiGuo> kuang1=new ArrayList<ShuiGuo>();
		kuang1.add(shuiguo1);
		kuang1.add(shuiguo2);
		kuang1.add(shuiguo3);
		
		System.out.println("第一个筐子里面总共有:"+kuang1.size()+"个水果");
		
		kuang1.add(shuiguo1);
		System.out.println("现在第一个筐子里面有"+kuang1.size()+"个水果");
		
		// 定义了第二个筐
		Collection<ShuiGuo> kuang2=new ArrayList<ShuiGuo>();
		kuang2.addAll(kuang1);
		System.out.println("第二个筐子里面有"+kuang2.size()+"个水果");
		kuang2.remove(shuiguo1);
		
		System.out.println("打印第一个筐子里面的水果:");
		for(ShuiGuo s:kuang1){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		System.out.println("打印第二个筐子里面的水果:");
		for(ShuiGuo s:kuang2){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		
	}
}

class ShuiGuo{
	private String name;
	private String yanse;
	public ShuiGuo(String name,String yanse){
		this.name=name;
		this.yanse=yanse;
	}
	@Override
	public String toString() {
		return yanse+"的"+name+"@"+this.hashCode();
	}
}

 对比拿出水果

两个筐中的水果对比,然后取出水果。

体验removeAll,从比较集合1和集合2,将从集合1中剔除在集合2中存在的对象。

public class TestMain {
	
	public static void main(String[] args) {
		
		// 定义三个水果字符串
		ShuiGuo shuiguo1=new ShuiGuo("苹果","红色");
		ShuiGuo shuiguo2=new ShuiGuo("橘子","橙色");
		ShuiGuo shuiguo3=new ShuiGuo("香蕉","黄色");
		
		// 定义了一个筐
		Collection<ShuiGuo> kuang1=new ArrayList<ShuiGuo>();
		kuang1.add(shuiguo1);
		kuang1.add(shuiguo2);
		kuang1.add(shuiguo3);
		
		System.out.println("第一个筐子里面总共有:"+kuang1.size()+"个水果");
		
		// 定义了第二个筐
		Collection<ShuiGuo> kuang2=new ArrayList<ShuiGuo>();
		kuang2.add(shuiguo1);
		kuang2.add(shuiguo2);
		System.out.println("第二个筐子里面有"+kuang2.size()+"个水果");
		
		kuang1.removeAll(kuang2);
		
		System.out.println("打印第一个筐子里面的水果:");
		for(ShuiGuo s:kuang1){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		System.out.println("打印第二个筐子里面的水果:");
		for(ShuiGuo s:kuang2){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		
	}
}

class ShuiGuo{
	private String name;
	private String yanse;
	public ShuiGuo(String name,String yanse){
		this.name=name;
		this.yanse=yanse;
	}
	@Override
	public String toString() {
		return yanse+"的"+name+"@"+this.hashCode();
	}
}

体验retainAll,从集合1中剔除不在集合2中存在的对象,与removeAll正好相反。

public class TestMain {
	
	public static void main(String[] args) {
		
		// 定义三个水果字符串
		ShuiGuo shuiguo1=new ShuiGuo("苹果","红色");
		ShuiGuo shuiguo2=new ShuiGuo("橘子","橙色");
		ShuiGuo shuiguo3=new ShuiGuo("香蕉","黄色");
		
		// 定义了一个筐
		Collection<ShuiGuo> kuang1=new ArrayList<ShuiGuo>();
		kuang1.add(shuiguo1);
		kuang1.add(shuiguo2);
		kuang1.add(shuiguo3);
		
		System.out.println("第一个筐子里面总共有:"+kuang1.size()+"个水果");
		
		// 定义了第二个筐
		Collection<ShuiGuo> kuang2=new ArrayList<ShuiGuo>();
		kuang2.add(shuiguo1);
		kuang2.add(shuiguo2);
		System.out.println("第二个筐子里面有"+kuang2.size()+"个水果");
		
		kuang1.retainAll(kuang2);
		
		System.out.println("打印第一个筐子里面的水果:");
		for(ShuiGuo s:kuang1){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		System.out.println("打印第二个筐子里面的水果:");
		for(ShuiGuo s:kuang2){
			System.out.print(s+"\t");
		}
		System.out.println();
		
		
	}
}

class ShuiGuo{
	private String name;
	private String yanse;
	public ShuiGuo(String name,String yanse){
		this.name=name;
		this.yanse=yanse;
	}
	@Override
	public String toString() {
		return yanse+"的"+name+"@"+this.hashCode();
	}
}

 学生排队

体验List接口的使用。包括:新增、插入、替换、subList、排序。

public class TestMain {
	
	public static void main(String[] args) {
		
		// 学生队伍
		List<Student> stds=new ArrayList<Student>();
		
		// 队伍中第1个是裘千仞
		stds.add(new Student("裘千仞",178));
		// 队伍中第2个是丁春秋
		stds.add(new Student("丁春秋",181));
		// 队伍中第3个是无崖子
		stds.add(new Student("无崖子",172));
		
		System.out.println("队伍情况:");
		for(Student st:stds){
			System.out.print(st.toString()+"\t");
		}

		System.out.println();
		System.out.println();
		
		// 血刀老祖插到第2个位置
		stds.add(1, new Student("血刀老祖",188));
		System.out.println("队伍情况:");
		for(Student st:stds){
			System.out.print(st.toString()+"\t");
		}
		System.out.println();
		System.out.println();
		
		// 胡斐把丁春秋替换了下来。
		stds.set(2,new Student("胡斐",182));
		System.out.println("队伍情况:");
		for(Student st:stds){
			System.out.print(st.toString()+"\t");
		}
		System.out.println();
		System.out.println();

		// 增加郭靖到第2的位置
		Student gj=new Student("郭靖",185);
		stds.add(1, gj);
		System.out.println("郭靖的下标值为:"+stds.indexOf(gj));
		System.out.println();
		System.out.println();

		//将后面三个学生加到新的队伍中
		List<Student> stds2=stds.subList(stds.size()-3, stds.size());
		// 新队伍的情况
		System.out.println("新队伍的情况:");
		for(Student st:stds2){
			System.out.print(st.toString()+"\t");
		}
		System.out.println();
		System.out.println();
		
		System.out.println("原队伍的情况:");
		for(Student st:stds){
			System.out.print(st.toString()+"\t");
		}
		System.out.println();
		System.out.println();
		
		Collections.sort(stds);
		System.out.println("原队伍按身高排序的结果:");
		for(Student st:stds){
			System.out.print(st.toString()+"\t");
		}
		System.out.println();
		System.out.println();
		
	}
}

class Student implements Comparable<Student>{
	private String name;  //姓名
	private Integer height;  // 身高
	public Student(String name,Integer height){
		this.name=name;
		this.height=height;
	}
	@Override
	public String toString() {
		return name+"["+height+"cm]";
	}
	@Override
	public int compareTo(Student o) {
		return height>o.height?1:height<o.height?-1:0;
	}
}

 学生成绩

体验Map接口,Map HashMap LinkedHashMap TreeMap

public static void main(String[] args) {
		
		Map<String,Integer> map=new HashMap<String,Integer>();
		//Map<String,Integer> map=new TreeMap<String,Integer>();
		// Map<String,Integer> map=new LinkedHashMap<String,Integer>();
		map.put("小明", 20);  
        map.put("小花", 99);  
        map.put("小刚", 33);  
        map.put("小红",76);  
        map.put("小智", 5);  
        map.put("小龙", 100);  
        map.put("小雅", 98);  
        map.put("小胖", 2);
        
        for(Iterator<String> i=map.keySet().iterator();i.hasNext();){
        	String key=i.next();
        	Integer val=map.get(key);
        	System.out.println(key+"--"+val);
        }
        
        
	}

stock_view_details_24px_519332_easyicon.net.png TreeMap根据学生姓名的编码值大小进行自动排序;

 小项目:手机通讯录管理

设计一个手机通讯录程序,用于存储人的姓名和手机号码。

功能要求

可以查看通讯录列表;

可以新增姓名和手机号;

可以根据姓名查询;

可以根据手机号查询。

可以支持模糊查询


项目要求

分别以Map方式、Set方式、List方式实现。

第一步:简单练习

简单实现通讯录的录入和查找功能,不需要客户交互操作,直接写main方法测试类。


第二步:模拟操作

& 通讯录列表(l)
&  新增手机号(a)
& 根据姓名精准查询(n+姓名)
& 根据手机号精准查询(p+手机号)
& 根据姓名模糊查询(mn+姓名)
& 根据手机号模糊查询(mp+手机号)
& 帮助(h)
& 退出(q)
>> n张无忌
张无忌   1397484****
>> mn张
张无忌   1397484****
张敏     1392773****
>>

 练习:菜谱管理

本练习模拟对菜谱进行编辑、显示和查询。


要求

定义菜品分类【CaiSort】。属性:分类名称、菜品List

定义菜品【Cai】。属性:菜品名称,价格。

定义菜谱类【Menu】。

  属性:分类列表【List<CaiSort> sorts】;

  方法:

    新增分类【addSort(分类名称)】;

    新增菜品【addCai(分类名称、菜品名、价格)】;

    显示菜谱列表【show()】;

    根据菜名进行查找【getCai(菜名)】;

    根据分类名返回菜品列表【lstCai(分类名)】;


 练习:以List和Map整理页面DOM元素

随便打开一个网页,查看页面源代码,将页面中的DOM元素的属性和值放入一个Map,并将多个DOM元素放入一个List。

譬如:

List<Map> doms=new ArrayList<Map>();
Map<String,String> dom=new HashMap<String,String>();
dom.put("tag","a");
dom.put("href","http://www.jiisb.com");
dom.put("target","_blank");
doms.add(dom);

并实现以下方法

addDom(tagName,String...):增加一个dom元素,采用数组参数。

getDomsByTagName(tagName):根据标签名查找dom元素;

getDomById(id):根据id名查找dom;

getDomsByName(name):根据dom的name属性值查找;

setDomValue(id,key,value):根据id查找某个标签,并更新某个key的value,如果没有key则新增;

removeDomById(id):删除指定id的dom;

showHtml(id):显示某个Dom的html代码;

showHtml():显示所有Dom的html代码;


 练习:将省、市、县区放入多级的Map中。

省级的map的包括三个key:name(省份名)、cities(市集合,是一个Map<String,List>类型的,存储多个市);

市的map也类似:name(市名)、areas(区县列表);

区县是一个List<String>类型的,保存name(区县名称)

实现多个方法

addProvince(name):增加一个省;

addCity(pname,name):在某个省下增加一个市;

addArea(pname,cname,name):在某个省、市下增加一个区县;

find(name):根据名称查找,判断是否存在这个地方;

remove(name):移除一个地域,如果存在子区域则提示不可以删除;

updateName(sname,name):将给某个地方改名字;

hasChild(name):判断是否有子地区;

childCount(name):判断子地区的数量;

getLevel(name):判断某个地区是省、市还是区县;

getParentName(name):判断是否有上级地区,如果有,则返回上级地区的名字。

(注意:这个方法用map方式是获得不了的,也就是说map的是不可能获得其上级对象的。)


2016-12-15补充


从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。


blob.png



blob.png


完成下列要求: 

1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。 

2) 增加了一位新老师Allen 教JDBC 

3) Lucy 改为教CoreJava   put方法 

4) 遍历Map,输出所有的老师及老师教授的课程(Set<Map.Entry<String,String>>、Set<String> get(key)) 

5) 利用Map,输出所有教JSP 的老师。