java集合汇总

Java集合类存放于Java.util包中,是一个用来存放对象的容器。
(1)集合只能存放对象,如果存一个int型数据1放入集合中,会自动转换成Integer类型存入,Java中每个基本数据类型都有对应的引用类型;
(2)集合存放的是对象的引用,对象本身还是存放在堆中;
(3)集合可以存放不同类型,不限数量的数据类型;
总之,集合就是一个可以存放若干个引用数据类型变量的类,这些变量可以属于不同类型。
Java集合可以分为:
(1)Set:无序、不可重复的集合;
(2)List:有序,可重复的集合;
(3)Map:具有映射关系的集合;

1.HashSet集合

HashSet集合无序、不可重复、不是线程安全且集合元素可以为null;
无序:当向HashSet集合存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该元素的hashCode值,然后根据hashCode值来决定该对象在HashSet中的存储位置,所以在集合中存储的数据不一定是存入时的顺序;
不可重复:如果两个元素的equals()方法返回true,但是hashCode()返回值不相等,hashSet会把它们存储在不同的位置(一般来说true相等,false不相等)

创建一个HashSet的引用对象,这个引用就是一个HashSet集合

import java.util.HashSet;

public class Test7 {
      HashSet set = new HashSet();
}

添加元素并输出当前集合

       set.add(1);
       set.add('a');
       System.out.println(set);

移除集合中的元素

         set.remove(1);
         System.out.println(set);

判断是否包含某个元素

         System.out.println(set.contains('a'));
         System.out.println(set.contains(1));

清空集合

       set.clear();

使用迭代器遍历集合

         Iterator it = set.iterator();//iter+ alt+/
         while(it.hasNext()){
        	 System.out.println(it.next());
         }

for-each 遍历集合

         for(Object obj: set){
        	System.out.println(obj); 
         }

获取集合元素个数

		System.out.println(set.size());

集合元素不能重复,如果输入两个1,集合中元素的个数还是1

可以在集合中存入null

         set.add(null);
         System.out.println(set);
         //输出[null, 1, a](因此不保证顺序)

如果想要让集合只能存相同类型的对象,需要使用泛型

        Set<Integer> set = new HashSet<Integer>();
		set.add(1);
		set.add(2);
		set.add("qq");//插入错误
		
//Set set = new HashSet();
//相当于Set<Object>set = new HashSet<Object>();

2. TreeSet集合

TreeSet集合可以确保集合元素处于排序状态;
TreeSet支持两种排序方法:自然排序(默认)和定制排序

自然排序

public class Test3 {
       public static void main(String[] args) {
		Set<Integer> set = new TreeSet<Integer>();//alt+/
		//TreeSet默认情况下自然排序
		set.add(5);
		set.add(2);
		set.add(4);
		set.add(3);

TreeSet调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系。然后将元素按升序排列
(1)this>obj,返回正数1
(2)this<obj,返回负数-1
(3)this=obj,返回0,认为两个数相等
必须放入同样类的对象(默认会进行排序),否则可能会发生类型转换异常,可以使用泛型来进行限制

		System.out.println(set); //输出:[2, 3, 4, 5]
		set.remove(5);
		System.out.println(set);//输出[2, 3, 4]
		System.out.println(set.contains(0));//输出false
		set.clear();
		System.out.println(set);//输出[]

迭代遍历集合

//使用迭代器遍历集合
		Iterator<Integer> it = set.iterator();//Iter+alt+/
		while (it.hasNext()){
		System.out.println(it.next());
		                }
//for each 迭代集合
		for(Integer it1 : set){
		//把 set中的元素取出,赋给obj
		System.out.println(it1);
				}
	}
}

定制排序

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class Test3 {
       public static void main(String[] args) {
		Person p1 = new Person("张三",21);
		Person p2 = new Person("李四",12);
		Person p3 = new Person("王五",26);
		Person p4 = new Person("qq",19);
		Set<Person> set = new TreeSet<Person>(new Person());
		set.add(p1);
		set.add(p2);
		set.add(p3);
		set.add(p4);
		for(Person p : set){
			System.out.println(p.name+"   "+p.age);
		}
	}
}
class Person implements Comparator<Person>{
     int age;
     String name;
     public Person(){
    	 
     }
     public Person(String name,int age){
    	 this.age = age;
    	 this.name = name;
     }
	@Override
	public int compare(Person o1, Person o2) {
		//年龄正序排列
		if (o1.age > o2.age){
			//颠倒顺序可以倒序排列
			return 1;
		}else if (o1.age < o2.age){
			return -1;
		}else
		    return 0;
	}
}

3.List集合

List代表一个有序可重复的集合,集合中的每一个元素都有其对应的顺序索引,元素可以重复,可以通过索引来访问指定位置的元素;默认按元素的添加顺序设置索引

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

public class Test4 {
       public static void main(String[] args) {
		List<String> list= new ArrayList<String>();
		//用接口接收接口实现类的new对象
		list.add("c");
		list.add("a");
		list.add("b");
		list.add("d");
		list.add("d");
		System.out.println(list);
		System.out.println(list.get(2));
		list.add(1,"f");
		System.out.println(list);
		List<String> l = new ArrayList<String>();
		l.add("111");
		l.add("221");
		list.addAll(2, l);
		System.out.println(list);
		System.out.println(list.indexOf("111"));
		System.out.println(list.lastIndexOf("d"));
		list.remove(2);
		System.out.println(list);
		list.set(1, "1");
		System.out.println(list);
		List<String> sublist = list.subList(2, 5);
		//下标2-5
		System.out.println(sublist);
		int i = list.size();
		System.out.println(i);
	}
}

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test6 {
       public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("b");
		list.add("cd");
		list.add("qq");
		list.add("1");
		System.out.println(list);
		Collections.reverse(list);//反转list集合
		System.out.println(list);
		Collections.shuffle(list);//随机排序
		System.out.println(list);
		Collections.sort(list);//字典升序排列
		System.out.println(list);
    	   Person p1 = new Person("张三",22);
    	   Person p2 = new Person("李四",12);
    	   Person p3 = new Person("王五",30);
    	   Person p4 = new Person("qq",18);
    	   List<Person> p = new ArrayList<Person>();
    	   p.add(p1);
    	   p.add(p2);
    	   p.add(p3);
    	   p.add(p4);
    	   for(Person per : p){
    		   System.out.println(per.name +"   "+per.age);
    	   }
	}
}
class Person implements Comparator<Person>{
    String name;
    int age;
    public Person(){
    	
    }
    public Person(String name,int age){
    	this.name = name;
    	this.age = age;
    }
	@Override
	public int compare(Person o1, Person o2) {
		if(o1.age > o2.age)return 1;
		else if (o1.age < o2.age)return -1;
		else return 0;
	}
}

4.Map集合

Map用于保存具有映射关系的数据,因此集合中保存着两组值,一组用来保存Map里的key值,另一组保存Map中的value值;这两组都可以是任何引用类型的数据;
Map中的key值不允许重复,即同一个Map对象的任何两个Key通过equals方法比较都返回false;
Key和value之间存在单向一对一关系,即通过指定的key总能找到唯一确定的value;
TreeMap

//TreeMap的自然排序是字典排序
    	Map<Integer,String> map = new TreeMap<Integer,String>();
    	map.put(4, "a");
    	map.put(2, "a");
    	map.put(3, "a");
    	map.put(1, "a");
    	System.out.println(map);
    	Map<String,String> map1 = new TreeMap<String,String>();
    	map1.put("a", "a");
    	map1.put("c", "c");
    	map1.put("d", "d");
    	map1.put("b", "c");
    	map1.put("1", "1");
    	map1.put("11", "a");
    	System.out.println(map1);

HashMap

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

public class Test5 {
       public static void main(String[] args) {
    	Map<String,Integer> map = new HashMap<String,Integer>();
		//使用接口接受实现接口的HashMap类创建的对象
		map.put("a", 1);
		map.put("b", 1);
		map.put("c", 2);
		map.put("d", 3);
		System.out.println(map);
		System.out.println(map.get("c"));
		//根据key取值
		map.remove("a");
		System.out.println(map);
		//根据key移除键值对
		System.out.println(map.size());
		//输出集合长度
		System.out.println(map.containsKey("d"));
		System.out.println(map.containsValue(0));
		//分别根据key和value判断是否包含值
        //通过map.keySet()遍历map集合
		Set<String> keys = map.keySet();
		//map.keySet()获取整个key集合,赋值给keys
		for(String key : keys){
			System.out.println("key:" + key + " value:" + map.get(key));
		}
		//通过map.entrySet()遍历map集合
		Set<Entry<String, Integer>> entrys = map.entrySet();
		//需要import java.util.Map.Entry;
		for(Entry<String, Integer> en : entrys){
			System.out.println("key:" + en.getKey() + " value:" + en.getValue());
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值