Java集合

来源:互联网 发布:淘宝旺铺基础版模板 编辑:程序博客网 时间:2024/06/05 03:53

Java集合

JAVA集合可以存储和操作数目不固定的一组数据;JAVA集合只能存放引用类型的数据,不能存放基本数据类型。

Java集合分为三种类型:

  • Set(集合)自动扩展,没有重复的元素
  • Map(映射)不能重复
  • List(列表)可以有重复的元素

List是存储单列数据的集合,且存储的数据是有顺序的,允许重复;而Set则不能有重复元素

Set中最常用的是HashSet,Map(接口)中最常用的是HashMap, List中最常用的是LinkedList(链表)和ArrayList(数组)
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
ArrayList从中间位置删除一个元素需要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。在数组的中间的位置插入一个元素也是如此。而LinkedList将每个对象存放在独立的节点中,每个节点还存放着序列中上一个节点的引用和下一个节点的引用,删除的时候只需要将被删除元素附近的节点更新一下即可。

==和equals的区别

“==”操作符的作用

1、用于基本数据类型的比较

2、判断引用是否指向堆内存的同一块地址。

equasl用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型

//不同的对象,同样的内容String s1 = new String("java");String s2 = new String("java");System.out.println(s1==s2);            //falseSystem.out.println(s1.equals(s2));    //true//同一对象,相同的内容String s1 = new String("java");String s2 = s1;System.out.println(s1==s2);            //trueSystem.out.println(s1.equals(s2));    //true

Map集合

map集合中,不能放入重复的key,后面存入的key值会覆盖前面存入的值,相同key的值,只能放一个。

Map<String,String> map=new HashMap<String,String>();       map.put("1", "luvo");       map.put("2", "lheiha");       map.put("3", "heiwo");       //第一种  str==map.keySet()       for (String str : map.keySet()) {        System.out.println(str+":"+map.get(str));        //System.out.println(map.keySet());    }       System.out.println("~~~~~~~~~~~~");       //第一种变种       Iterator<String> iterat=map.keySet().iterator();       while(iterat.hasNext()){           String i=iterat.next();           System.out.println(i+":"+map.get(i));       }       //第二种       for(Entry<String, String> entry:map.entrySet()){           System.out.println(entry.getKey()+":"+entry.getValue());       }      //第三种       for (String str : map.values()) {           System.out.println(str);    }       //第四种迭代器       Iterator<Entry<String,String>> iterator = map.entrySet().iterator();       while (iterator.hasNext()){           Entry<String,String> entry=iterator.next();           System.out.println(entry.getKey()+":"+entry.getValue());       }

结果为:
这里写图片描述

List集合

List中允许放入相同的值,也可以将map值放入。

//ArrayList 使用        ArrayList<String> list1=new ArrayList<String>();  //默认容量为10        list1.add("1");        list1.add("a");        list1.add("b");        list1.add("c");        for (int i = 0; i < list1.size(); i++) {            System.out.println(list1.get(i));        }        for (String str : list1) {            System.out.println(str);        }        Iterator<String> iterator=list1.iterator();        while(iterator.hasNext()){            System.out.println(iterator.next());        }

结果为:
这里写图片描述

public static void main(String[] args) {        List<Map<String,String>> list=new LinkedList<Map<String,String>>();        Map<String,String> map=new HashMap<String,String>();        map.put("id", "12345678");        map.put("name", "张三");        map.put("group", "我的好友");        map.put("information", "男,28岁,10月2日,属兔,天枰座,B血型");        map.put("down", "中国山东威海");        map.put("addr", "北京海淀");        map.put("phone", "13548962130");        map.put("email", "123456789@qq.com");        map.put("邮编", "223301");        map.put("Q龄", "5");        map.put("Language", "中文");        map.put("name1", "璐璐");        map.put("Englishname", "张珊");        map.put("major", "高中");        map.put("备注", "学习好,成绩好!");        list.add(map);        Map<String,String> map1=new HashMap<String,String>();        map1.put("id", "12345678");        map1.put("name", "张三");        map1.put("group", "我的好友");        map1.put("information", "男,28岁,10月2日,属兔,天枰座,B血型");        map1.put("down", "中国山东威海");        map1.put("addr", "北京海淀");        map1.put("phone", "13548962130");        map1.put("email", "123456789@qq.com");        map1.put("邮编", "223301");        map1.put("Q龄", "5");        map1.put("Language", "中文");        map1.put("name1", "璐璐");        map1.put("Englishname", "张珊");        map1.put("major", "高中");        map1.put("备注", "学习好,成绩好!");        list.add(map1);        for (int i = 0; i < list.size(); i++) {            System.out.println(list.get(i).get("id"));            System.out.println(list.get(i).get("name"));            System.out.println(list.get(i).get("group"));            System.out.println(list.get(i).get("information"));            System.out.println(list.get(i).get("down"));            System.out.println(list.get(i).get("addr"));            System.out.println(list.get(i).get("phone"));            System.out.println(list.get(i).get("email"));            System.out.println(list.get(i).get("邮编"));            System.out.println(list.get(i).get("Q龄"));            System.out.println(list.get(i).get("Language"));            System.out.println(list.get(i).get("name1"));            System.out.println(list.get(i).get("Englishname"));            System.out.println(list.get(i).get("major"));            System.out.println(list.get(i).get("备注"));        }    }

结果:这里写图片描述

Set集合

//HashSet  使用        Set<String> set=new HashSet<String>();        set.add("a");//相同的值只能有一个,相同的值存不进去,根据内存指针的顺序,外界看不到        set.add("b");        set.add("c");        set.add("d");        set.add("e");        for (String str : set) {            System.out.println(str);        }        Iterator<String> iter=set.iterator();//迭代器遍历        while(iter.hasNext()){            System.out.println(iter.next());        }

结果为:这里写图片描述

新建对象:new , clone 和 实例化三种

ArrayList和LinkedList的底层实现是什么

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。(参考数组与链表来思考)

3.对于新增和删除操作add和remove,LinkedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。

练习

import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class PersonTest {    public static void main(String[] args) {        Person person=new Person();        person.setName("闫123");        person.setPrder_id("12345789");        Map<String,String> addr=new HashMap<String,String>();        addr.put("姓名", "yangpeng");        addr.put("电话", "yangpeng");        addr.put("详细地址", "yangpeng");        person.setAddr(addr);        List<String> books=new ArrayList<String>();        books.add("book1");        books.add("book3");        books.add("book2");        person.setBook(books);        System.out.println(person.getAddr());        System.out.println(person.getName());    }}//构造方法import java.util.List;import java.util.Map;public class Person {    private String name;    private  String prder_id;    private Map<String,String> addr;//地址是一个map集合    private  List<String> book;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name.substring(0,3);//截取索引为0-2的字符    }    public String getPrder_id() {        return prder_id;    }    public void setPrder_id(String prder_id) {        this.prder_id = prder_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;    }}

结果:这里写图片描述

作业:

练习题
1、 创建一个List,在List 中增加N个工人,工人信息存储在Map中,基本信息如下:

    姓名 年龄 工资     zhang3 18 3000     li4 25 3500     wang5 22 3200     ……

2、利用for 循环遍历,打印List 中所有工人的信息
3、利用迭代遍历,对List 中所有的工人信息进行遍历。
4、把所有人的姓名存储在Set中,遍历输出所有姓名。

代码:package tianjin.zhongke;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;public class ManagerTest {    public static void main(String[] args) {        List<Map<String,String>> list=new ArrayList<Map<String,String>>();        Map<String,String> map=new HashMap<String,String>();        Map<String,String> map1=new HashMap<String,String>();        Map<String,String> map2=new HashMap<String,String>();        map.put("name","张珊");        map.put("age", "18");        map.put("salary", "3500.0");        list.add(map);        map1.put("name","李四");        map1.put("age", "20");        map1.put("salary", "3500.0");        list.add(map1);        map2.put("name","王五");        map2.put("age", "25");        map2.put("salary", "3500.0");        list.add(map2);        //for循环遍历        for (Map<String, String> map3 : list) {            System.out.println(map3);        }        Iterator<Map<String, String>> iterator=list.iterator();//迭代器遍历        while(iterator.hasNext()){            //System.out.println(iterator.next());            //采用这种方式,输出的相对好看点,这也是一种输出方式            //为什么要提前将iterator.next()定义成一个变量,因为如果将下面输出语句中的a换成iterator.next(),将只会输出第一个的name,第二个的age和第三个的salary。因为执行一句的过程中,将会执行iterator.next(),然后就回到下一个对象中去。             Map<String,String> a=iterator.next();            System.put.println("name: "+a.get("name"));            System.put.println("age: "+a.get("age"));            System.put.println("salary: "+a.get("salary"));        }        Set<String> set=new HashSet<String>();        set.add(map.get("name"));        set.add(map1.get("name"));        set.add(map2.get("name"));        for (String str : set) {            System.out.println(str);        }    }}

结果:
这里写图片描述