Java集合

集合类是一种工具类,比如作为容器存储数据,大致可以分为List,Set,Map,Queue四种体系:

List代表有序、可重复的集合,

Set代表无序、不可重复的集合;

Map代表具有映射关系的集合;

Queue代表一种队列集合实现(Java5新增的)。

常用的实现类:

HashMap、ArrayList、HashSet及次之的LinkedList、TreeSet、ArrayDeque、TreeMap

常用的方法:增删改查(遍历)

list:arrayList底层采用可变数组,数组扩容时采用新数组拷贝,linkList底层采用双向链表;

package com.stx.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class 集合list {
	public static void main(String[] args) {
		List list = new ArrayList();
		List temp = new ArrayList();
		list.add("test");// 添加 add 方法
		list.add("xp");
		// System.out.println(list);
		list.remove("test");// 删除指定地元素,让末尾的数组向前移动一位,后面置空,方便GC
		// System.out.println(list);
		boolean bol = list.contains("xp");// 查询指定地元素
		// System.out.println(bol);
		list.removeAll(temp);// 用list地元素减去temp的元素
		list.retainAll(temp);//list中只剩temp的元素
		System.out.println(list);
		temp.clear();//删除temp种中的所有元素
		list.add("xp");
		
		
		//向books集合中添加三个元素
		list.add(1,"a");
		list.add(2,"b");
		list.add(3,"c");
		
		//将新字符串对象插入在第二个位置
		list.set(2, "bb");
		//判断指定元素在List集合中位置:输出1,表明位于第二位
		System.out.println(list.indexOf(new String("bb")));
		//将第二个元素替换成新的字符串对象
		System.out.println(list.subList(1, 2));
		//集合遍历
		list.forEach(obj->System.out.println(obj));//java8给Iterator接口新增forEach方法
		
		Iterator it = list.iterator();
		while(it.hasNext()){
			String list1 = (String) it.next();
			System.out.println(list1);
		}
		
		for (Object object : list) {
			
			String str = (String) object;
			System.out.println(object);
		}
	}

}

set:当向HashSet中存值得时候,HashSet会调用hashCode()方法来获取该对象的hashCode值,然后决定在HashSet中的位置,HashSet判断两个值得相等的标准是equal()值相等且hashCode的值也相等。

package com.stx.test;


import java.util.*;

// 类A的equals方法总是返回true,但没有重写其hashCode()方法
class A {
	public boolean equals(Object obj) {
		return true;
	}
}

// 类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B {
	public int hashCode() {
		return 1;
	}
}

// 类C的hashCode()方法总是返回2,且重写其equals()方法总是返回true
class C {
	public int hashCode() {
		return 2;
	}

	public boolean equals(Object obj) {
		return true;
	}
}

public class 集合set {
	public static void main(String[] args) {
		HashSet books = new HashSet();
		// 分别向books集合中添加两个A对象,两个B对象,两个C对象
		books.add(new A());
		books.add(new A());
		books.add(new B());
		books.add(new B());
		books.add(new C());
		books.add(new C());
		System.out.println(books);
	}
}

result:
[com.stx.test.B@1, com.stx.test.B@1, com.stx.test.C@2, com.stx.test.A@15db9742, com.stx.test.A@6d06d69c]

HashMap,HashTable:底层使用数组实现,数组中每一项是个单向链表,即数组和链表的结合体

区别:https://mp.csdn.net/postedit/80822538

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值