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地址:北京市海淀区身份证号:1408211995031200982个人的信息:姓名:王二小性别:男民族:汉出生日期: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工资:30002个人的信息:姓名:Li4年龄:20工资:25003个人的信息:姓名:Wang5年龄:22工资:32004个人的信息:姓名:liuliu年龄:18工资:80005个人的信息:姓名:zhouqi年龄:25工资:3500{姓名=zhang3, 工资=3000, 年龄=18}{姓名=Li4, 工资=2500, 年龄=20}{姓名=Wang5, 工资=3200, 年龄=22}{姓名=liuliu, 工资=8000, 年龄=18}{姓名=zhouqi, 工资=3500, 年龄=25}输出的姓名如下:zhang3  zhouqi  Wang5  Li4  liuliu  
原创粉丝点击