• Java-集合


    特点

    • List 存储的值可以重复, 集合 按照对象的进入的顺序保存对象,不会做额外的排序操作,是一种有序的存储。
    • Set 存储的值不可以重复,是一种无序的存储,遍历较慢,随机插入较快。
    • Map 存储的键 不可以重复,但是值可以重复,是一种无序的存储。
    • ArrayList List接口的实现类,允许对 集合中的对象随机访问,但是随机插入较慢,推荐用来遍历。
    • LInkedList 插入和删除的开销非常少,但是随机访问较慢。
    • HashSet Set 接口的实现类 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
    • HashMap 采用散列存储 通过 【键】来获得值,【键】 不可以重复。

    ArrayLIst

    常用方法

    • get() 获取指定位置的对象
    • size() 获取集合的大小
    • add() 向集合最后追加元素
    • clear() 清空集合中的所有的元素

    Demo

    public static void dmeoOfList() {
    	ArrayList<String> sList = new ArrayList<String>();
    	//想集合中添加一些元素
    	for (int i = 0; i < 10; i++) {
    		sList.add(String.valueOf(i));
    	}
    	System.err.println("集合中对象当前的数量为:" + sList.size());
    	// 清空所有的元素
    	sList.clear();
    	System.err.println("集合中对象当前的数量为:" + sList.size());
    
    }
    

    LinkedList

    LinkedList 是一种双向的链表

    常用方法

    addFirst() 在链表的头部插入对象

    addLast() 在链表的尾部插入对象

    remote() 移除对象 , 有多个重载形式

    Demo

    public static void demoOfLinkedList() {
    	LinkedList<String> linkedList = new LinkedList<String>();
    	// 在链表的头部插入内容
    	linkedList.addFirst("第一位");
    	// 在指定的位置插入指定的内容
    	linkedList.add(1, "中间插入的");
    	// 在链表的尾部插入内容
    	linkedList.addLast("最后一位");
    	
    	//移除指定位置的元素
    	linkedList.remove(0);
    	
    	//遍历所有内容
    	for (String item : linkedList) {
    		System.out.println(item);
    	}
    }
    

    HashSet

    HashSet 是不允许有重复的值的,判断的依据是, 集合中是否相同的 通过 hashCode方法来检查是否有相同的 哈希值 ,如果对象的哈希值相同那么,就执行对象的 equals() 方法进行判断 如果 equals()方法返回的同样是true 那么就认为这两个对象相同。

    验证

    package Program;
    
    import org.omg.CORBA.ORBPackage.InconsistentTypeCode;
    
    public class Person {
    
    	private String idNumber;
    	private String name;
    	private int age;
    
    	public Person(String idNumber, String name, int age) {
    		super();
    		this.idNumber = idNumber;
    		this.name = name;
    		this.age = age;
    	}
    
    	public Person() {
    
    	}
    
    	public String getIdNumber() {
    		return idNumber;
    	}
    
    	public void setIdNumber(String idNumber) {
    		this.idNumber = idNumber;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	/*
    	 * 因为我们每一个人的身份证号是唯一的所以,如果身份证号相同那么就认为,两个person对象是一个person对象
    	 * */
    	@Override
    	public boolean equals(Object obj) {
    		System.out.println("equals");
    		Person person = (Person) obj;
    		return person.idNumber.equals(this.idNumber);
    	}
    
    	/*
    	 * 为了验证方法的执行将所有的 对象的hashCode方法都返回一个相同的值
    	 */
    	@Override
    	public int hashCode() {
    		System.out.println("hashCode Method");
    		return 1;
    
    	}
    
    }
    

    调用

    public static void demoOfHashSet() {
    	Person firstPerson = new Person("123456","firstPerson",11);
    	
    
    	Person secondPerson = new Person("123456","secondPerson",11);
    	
    	HashSet<Person> hashSet = new HashSet<Person>();
    	hashSet.add(firstPerson);
    	hashSet.add(secondPerson);
    	
    	System.out.println("当前集合对象的数量:"+hashSet.size());
    	
    	for (Person person : hashSet) {
    		System.out.println("IdNumber: "+person.getIdNumber()+" Name "+person.getName()+" Age "+person.getAge());
    	}
    }
    //输出结果
    hashCode Method
    hashCode Method
    equals
    当前集合对象的数量:1
    IdNumber: 123456 Name firstPerson Age 11
    

    以为我们重写了,我们的 hashCode 和 equals 方法 ,每一次插入的时候都会 执行 hashCode 方法 ,当我们插入第二条记录的时候,我们看到,因为我们的hashCode方法都返回了相同的值,第一次插入数据的是时候是没有问题的, 但我们插入第二条记录的时候,因为 hashCode方法是相同的就会执行 equals 方法 ,我们重写了equals 方法 通过 idnumber 来判断 对象是不是 相同,随意第二条记录别没有被插入进去。

    Map

    public static void demoOfHashMap() {
    	Map<String, String> map = new HashMap<String, String>();
    
    	map.put("1", "1");
    	map.put("2", "2");
    	//这里会将原来的值覆盖掉
    	map.put("1", "1.1");
    	
    	//通过 键-值 的set集合遍历
    	for (Map.Entry<String, String> item : map.entrySet()) {
    		System.out.println("Key " + item.getKey() + " value " + item.getValue());
    	}
    	
    	//通过 key 的set集合遍历
    	for (String item : map.keySet()) {
    		System.out.println("Key "+item +" vluae "+map.get(item));
    	}
    	
    	//这种方式仅仅能获取值
    	for (String item : map.values()) {
    		System.out.println("value "+item);
    	}
    }
    
  • 相关阅读:
    ArrayList和LinkedList的区别
    线程的基本概念、线程的基本状态以及状态之间的关 系
    当一个线程进入一个对象的一个synchronized方法后, 其它线程是否可进入此对象的其它方法?
    Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.thinkplatform.dao.UserLogDao' available: expected at least 1 bean which qualifies as autowi
    IDEA设置热部署
    spring的核心组件及作用(一)
    解决Linux启动redis时出现提示权限不够问题
    Struts自动装配和四种放入Session作用域的方式
    Struts第一个案例搭建
    当List<String> list =new ArrayList<String>(20); 他会扩容多少次
  • 原文地址:https://www.cnblogs.com/slyfox/p/7273948.html
Copyright © 2020-2023  润新知