7.30学习总结
来源:互联网 发布:淘宝刀剑哪家好 编辑:程序博客网 时间:2024/06/01 07:55
7.30学习总结
集合
概述:
1、一种工具类,用于存储数量不等的对象,并实现常用的数据结构;还可以保存具有映射关系的关系数组。
2、JAVA集合只能存放引用类型的数据,不能存放基本数据类型。
主要类型:
Set:
无序的、不可重复的集合。支持数学中的集合操作,如:交、并。
import java.util.HashSet;import java.util.Set;public class T { public static void main(String[] args) { //重复的值只输出一个,里面的值不可以重复,根据存储的顺序输出 //第一次可以执行成功,返回true System.out.println(set1.add("asd")); //第二次执行失败,返回false System.out.println(set1.add("asd")); //内存中有顺序,相同的值不能加进去 set1.add("qwe"); set1.add("qwrt"); set1.add("zdcf"); for(String str:set1){ System.out.println(str); } }}运行结果:truefalseasdzdcfqwrtqwe
上述程序可以看出,set列表中的值不可重复,且输出的结果的顺序没有规律。
List:
有序的、可重复的集合。使用此接口能够精确的控制每个元素插入的位置,用户能够使用索引来访问List中的元素。如下面代码所示:
import java.util.ArrayList;import java.util.List;public class T1 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //重复的值可以输出,即集合里可以存储重复的值 System.out.println(list.add("1")); list.add("2"); System.out.println(list.add("1")); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } }}运行结果:truetrue121
Map:
Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象,提供按键对象查找值对象。Map没有继承于Collection接口。
import java.util.HashMap;import java.util.Map;public class Test { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String >(); map.put("1", "a"); map.put("2", "b"); map.put("3", "a");//key的值不一样,value的值可以一样 map.put("1", "as"); for(String i : map.keySet()){ System.out.println(i+":"+map.get(i)); } }}运行结果:1:as2:b3:a
在上述代码中,可以看出,Map中存储的数据是有顺序的,且相同的“k”值,其前面的value值会被覆盖。
特点比较:
1、有序性:
set:无序集合,我们可以看到的是,输出的结果无序。
Map:有序集合,输出的结果按照key值得顺序排列。
List:有序集合,输出的结果与输入的顺序一致。
2、可重复性:
set:不可重复,若添加的值在列表中已经存在,那这个值是添加不进去的,add()函数会返回false。
Map:在同一个Map对象中,Key值不可相同,而不同Key值对应的value值可以相同;如果,key值相同,则前面的value值会被后添加的value值覆盖。在不同的Map对象中Key值是可以相同的。
List:在List列表中可以存储相同的数据。
3、是否有索引值:
List集合和Map集合有索引值,而Set集合没有索引值。
Map可提供Key值索引。
常用的集合:
ArrayList、LinkedList、HashMap
实例
1、身份证信息的存储
所用列表集合:
Map、List
Map集合用来存放每个身份证中存放的信息,需要创建多个Map对象,每个Map对象对应一个人;(不同的Map对象中的Key值可以相同。)
List列表集合用来存储Map对象,即存储多个人的身份证信息。
代码实现如下:
import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;//用Map实现身份证,一个人对应一个Mappublic class Mapp { public static void main(String[] args) { Map<String,String> map1 = new HashMap<String,String>(); //List中用的是HashMap,在添加时,参数的类型也必须是HashMap类型 List<Map<String,String>> list = new LinkedList<Map<String,String>>(); //可以将List的类型改为<object> map1.put("name", "刘胡兰"); map1.put("sex", "女"); map1.put("nation", "汉"); map1.put("birth", "1995-03-12"); map1.put("addr", "北京市海淀区"); map1.put("idcard", "140821199503120098"); list.add(map1); HashMap<String,String> map2 = new HashMap<String,String>(); map2.put("name", "王二小"); map2.put("sex", "男"); map2.put("nation", "汉"); map2.put("birth", "1990-09-12"); map2.put("addr", "北京市海淀区"); map2.put("idcard", "111425199009120067"); list.add(map2); //map1和map2是两个map对象,两个map中的key值可以一样,同一个map对象中的key值不能相同 for(int i=0;i<list.size();i++){ System.out.println("第"+(i+1)+"个人的信息:"); System.out.println(list.get(i).get("name")); System.out.println(list.get(i).get("sex")); System.out.println(list.get(i).get("nation")); System.out.println(list.get(i).get("birth")); System.out.println(list.get(i).get("addr")); System.out.println(list.get(i).get("idcard")); } }}运行结果:第1个人的信息:姓名:刘胡兰性别:女民族:汉出生日期:1995-03-12地址:北京市海淀区身份证号:140821199503120098第2个人的信息:姓名:王二小性别:男民族:汉出生日期:1990-09-12地址:北京市海淀区身份证号:111425199009120067
2、订单
显示用户的订单信息,包括用户名、订单号、地址(包括,姓名、详细地址、电话)、商品。
由于地址中包括姓名、详细地址、电话,把地址定义成List列表类型,存放数据;一个人可以一次性购买多种商品,因此也将商品定义为列表类型。
代码如下:
Person类:
import java.util.List;import java.util.Map;public class Person { private String name; private String order_id; private Map<String,String> addr; private List<String> book; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOrder_id() { return order_id; } public void setOrder_id(String order_id) { this.order_id = order_id; } public Map<String, String> getAddr() { return addr; } public void setAddr(Map<String, String> addr) { this.addr = addr; } public List<String> getBook() { return book; } public void setBook(List<String> book) { this.book = book; }}
PersonTest类:
import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;public class PersonTest { public static void main(String[] args) { Person person = new Person(); person.setName("qwer"); person.setOrder_id("1234567890"); Map<String,String> addr = new HashMap<String,String>(); addr.put("姓名:", "qwer"); addr.put("电话:", "13567432345"); addr.put("详细地址:", "北京市海淀区"); person.setAddr(addr); List<String> books = new LinkedList<String>(); books.add("books1"); books.add("books2"); books.add("books3"); person.setBook(books); System.out.println("用户名:"+person.getName()); System.out.println("订单id:"+person.getOrder_id()); System.out.println("地址:"+person.getAddr()); System.out.println("商品:"+person.getBook()); }}运行结果:用户名:qwer订单id:1234567890地址:{详细地址:=北京市海淀区, 电话:=13567432345, 姓名:=qwer}商品:[books1, books2, books3]
遍历方式
Map集合的遍历方式:
四种:
第一种:for-each:
//遍历方式一,获取到keySet的集合,然后通过集合输出for(String c : map.keySet()){//遍历 System.out.print(map.get(c)+" ");}
对方式一使用迭代器:
System.out.println();Iterator<String> iteratorset = map.keySet().iterator();while(iteratorset.hasNext()){ System.out.println(iteratorset.next()+":"+map.get(iteratorset.next()));}-----------------------------------------------------------while(iteratorset.hasNext()){ String s = iteratorset.next(); System.out.println(s+":"+map.get(s));}
上面的代码中写了两种迭代器方法,但第一种是错的,便利结果只输出了列表中值得一般,原因是在一次输出语句中执行了两次iteratorset.next()方法。
第二种修改后,可以成功遍历。
在写这种遍历时,犯了错误,把第一种的输出语句写成了这样:
System.out.println(iteratorset.next()+”:”+map.get(iteratorset));
结果倒是可以成功遍历列表中的所有值,但是输出的结果全为null,原因是把iteratorset当作对象传进了map.get()方法中,但并没有对iteratorset对象赋值,所以遍历出的结果全为null。
如下面图片所示:
方式二:
//遍历方式二for(Entry<String,String> entry : map.entrySet()){ System.out.print(entry.getKey()+":"+entry.getValue()+" ");}
方式三:
for(String str : map.values()){ System.out.print(str+" ");}
方式四:
//遍历方式四:迭代器,利用迭代器迭代set,与第二种原理一样Iterator<Entry<String,String>> iterator = map.entrySet().iterator();while(iterator.hasNext()){ Entry<String,String> entry = iterator.next(); System.out.println(entry.getKey()+":"+entry.getValue());}
HashSet列表的两种遍历方法:
//方式一for(String str : set){ System.out.println(str);}//方式二Iterator<String> it = set.iterator();while(it.hasNext()){ System.out.println(it.next());}
ArrayList的三种遍历方法:
import java.util.ArrayList;import java.util.Iterator;public class C { public static void main(String[] args) { ArrayList<String> arr = new ArrayList<String>(); arr.add("asdfgt"); arr.add("zxcvbn"); arr.add("qwdefgt"); //方式一,for循环 for(int i=0;i<arr.size();i++){ System.out.print(arr.get(i)+" "); } //方式二,for-each循环 System.out.println();//用于换行 for(String str : arr){ System.out.print(str+" "); } //方式三,迭代器 System.out.println();//用于换行 Iterator<String> it = arr.iterator(); while(it.hasNext()){ System.out.print(it.next()+" "); } System.out.println();//用于换行 System.out.println(arr); arr.remove("zxcvbn");//删除元素 System.out.println(arr); }}运行结果:asdfgt zxcvbn qwdefgt asdfgt zxcvbn qwdefgt asdfgt zxcvbn qwdefgt [asdfgt, zxcvbn, qwdefgt][asdfgt, qwdefgt]
今天的学习知识将老师上课上运行的代码实现了,虽然列表的使用大致相同,但实现时还是会有细微的差别,如遍历时,所用到的方法都不尽相同。由于之前编写代码并没有过多的涉及到列表,对于今天学习的知识掌握的还不是很牢固,要想熟练掌握,还要再进行反复练习。
集合练习题
1、 创建一个List,在List 中增加N个工人,工人信息存储在Map中,基本信息如下:
姓名 年龄 工资
zhang3 18 3000
li4 25 3500
wang5 22 3200
……
2、利用for 循环遍历,打印List 中所有工人的信息
3、利用迭代遍历,对List 中所有的工人信息进行遍历。
4、把所有人的姓名存储在Set中,遍历输出所有姓名。
import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class O { public static void main(String[] args) { List<HashMap<String,String>> list = new LinkedList<HashMap<String,String>>(); HashMap<String,String> map1 = new HashMap<String,String>(); map1.put("姓名", "zhang3"); map1.put("年龄", "18"); map1.put("工资", "3000"); list.add(map1); HashMap<String,String> map2 = new HashMap<String,String>(); map2.put("姓名", "Li4"); map2.put("年龄", "20"); map2.put("工资", "2500"); list.add(map2); HashMap<String,String> map3 = new HashMap<String,String>(); map3.put("姓名", "Wang5"); map3.put("年龄", "22"); map3.put("工资", "3200"); list.add(map3); HashMap<String,String> map4 = new HashMap<String,String>(); map4.put("姓名", "liuliu"); map4.put("年龄", "18"); map4.put("工资", "8000"); list.add(map4); HashMap<String,String> map5 = new HashMap<String,String>(); map5.put("姓名", "zhouqi"); map5.put("年龄", "25"); map5.put("工资", "3500"); list.add(map5); //for循环遍历 for(int i=0;i<list.size();i++){ System.out.println("第"+(i+1)+"个人的信息:"); System.out.println("姓名:"+list.get(i).get("姓名")); System.out.println("年龄:"+list.get(i).get("年龄")); System.out.println("工资:"+list.get(i).get("工资")+"\n"); } //迭代器遍历 Iterator<HashMap<String,String>> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //所有姓名存放在Set中 HashSet<String> set = new HashSet<String>(); String[] a = new String[5]; for(int i=0;i<list.size();i++){ a[i] = list.get(i).get("姓名"); set.add(a[i]); } System.out.println("输出的姓名如下:"); for(String i : set){ System.out.print(i+" "); } }}运行结果:第1个人的信息:姓名:zhang3年龄:18工资:3000第2个人的信息:姓名:Li4年龄:20工资:2500第3个人的信息:姓名:Wang5年龄:22工资:3200第4个人的信息:姓名:liuliu年龄:18工资:8000第5个人的信息:姓名:zhouqi年龄:25工资:3500{姓名=zhang3, 工资=3000, 年龄=18}{姓名=Li4, 工资=2500, 年龄=20}{姓名=Wang5, 工资=3200, 年龄=22}{姓名=liuliu, 工资=8000, 年龄=18}{姓名=zhouqi, 工资=3500, 年龄=25}输出的姓名如下:zhang3 zhouqi Wang5 Li4 liuliu
- 7.30学习总结
- 7.30学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- fork后父子进程共享资源
- Spring MVC:报错No converter found for return value of type
- java网络编程之Socket
- RecyclerView的适配器
- phpStudy for Linux (lnmp+lamp一键安装包)
- 7.30学习总结
- BSS段、数据段、代码段、堆与栈
- nessus集成hydra进行弱口令暴力破解
- @SpringBootApplication的使用
- Eclipse Che安装体验(一)----Windows下docker的安装
- 如何分别使用递归与非递归实现二分查找算法
- 配置你的 csh/tcsh
- NOIP 2015 斗地主
- # .NET切面编程——PostSharp