集合list,set,map

单列集合
···collection 单例集合的根接口

1.list如果是实现了list接口的集合类,具备特点:有序,可重复

————-1.1 ArrayList ArrayList 底层是使用Object数组实现的,特点:查询速度快,增删慢

————-1.2 LinkedList LinkedList 底层是使用了链表数据结构实现的,特点:查询速度慢,增删快
————-1.3 Vector底层是使用了Object数组实现的,实现原理和ArrayList是一致的,但是是线程安全的,操作效率低

//List.java
package day01jihe;

import java.util.ArrayList;

public class List {
    public static void main(String args[]){
        ArrayList<Person> list = new ArrayList<Person>();
         list.add(new Person(001,"张"));
         list.add(new Person(001,"张"));
         list.add(new Person(002,"兵")); 
         list.add(new Person(003,"杰"));
         System.out.println("=======list的foreach======");
         for (Person person : list) {
            System.out.println("id= "+person.getId()+",name="+person.getName());
        }


    }
}

2.set 如果是实现了set接口的集合类,具备特点:无序,不可重复

————-2.1 HashSet底层是使用了哈希表实现的,特点:存取速度快
补充:HashSet存储元素的原理:往HashSet添加元素时候,首先调用元素的hashCode方法得到元素的哈希代码,然后通过运算算出钙元素存在哈希表中的位置。重写hashCode,equals两个方法。
情况1:如果算出的位置目前还没有元素,则直接添加至哈希表
情况2:如果有元素,则用equals方法进行元素比较, 如果equals方法返回true,name钙元素为重复元素,不许添加,若false,则可以添加
————-2.2 TreeSet底层是使用的二叉树数据结构实现的,特点:对集合中的元素进行排序存储

//Person.java=====  list.java中也用到**
package day01jihe;


public class Person {
    int id;
    String name;
    public Person(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }


    public int getId() {
        return id;
    }




    public void setId(int id) {
        this.id = id;
    }




    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

    @Override
    public int hashCode() {

        return this.id;
    }
    @Override
    public boolean equals(Object obj) {
        Person p = (Person)obj;
        return this.id == p.id;
    }
}
//Set.java
package day01jihe;

import java.util.HashSet;
import java.util.Iterator;

public class Set {
     public static void main(String args[]){
         HashSet<Person> set = new HashSet<Person>();
         set.add(new Person(001,"张"));
         set.add(new Person(001,"张"));
         set.add(new Person(002,"兵")); 
         set.add(new Person(003,"杰"));
         System.out.println("=====Set直接获取======");
         System.out.println("集合的元素"+set);
         System.out.println("=====Set迭代器方式遍历======");
         //迭代器在迭代的过程中,不能使用几何对象修改集合中的元素个数,如果需要修改,需要使用迭代器的方法进行修改
         Iterator<Person> it = set.iterator();//获取到迭代器
         while(it.hasNext()){
             System.out.println(it.next()+",");
         }
         System.out.println("=====Set的foreach方式遍历======");
         for (Person person : set) {

             System.out.println(person+",");
             //set.add(new Person(004,"la"));报错,因为在迭代过程中修改元素个数

        }
     }
}

双列集合

3.Map 存储的数值都是以键值对形式存在,键不可以重复,值可以重复

————-3.1 HashMap 底层使用哈希表实现
————-3.2 TreeMap 底层是用二叉树实现

//Map.java
package day01jihe;


import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;


public class Map {
    public static void main(String args[]){
         HashMap<String,String> map = new HashMap<String,String>();
         map.put("张", "001");
         map.put("兵", "002");
         map.put("杰", "003");
         Set<Entry<String,String>> entrys = map.entrySet(); //将map转为set
         for (Entry<String,String> entry : entrys) {
            System.out.println("key="+entry.getKey()+"value="+entry.getValue());
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值