JAVA集合

JAVA集合

Java集合就像一个容器,可以把多个对象的引用放入容器中。
Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
Java集合可分了Set、List和Map三种体系

–Set:无序,不可重复的集合
–List:有序,可重复的集合
–Map:具有映射关系的集合

在这里插入图片描述

1、Collection接口

1.1、是List,Set和Queue的父类,该接口定义的方法即可与操作Set集合,也可用于操作List和Queue集合。
1.2Collection中的一些方法
add 这个是添加一个元素到集合中
addAll 添加所有元素到集合中
在Collection中无法获取指定的元素,但可以遍历所有的元素,使用增强的for循环或者使用Iterator 迭代器。

 class CollectionTest{
	Iterater it = collection.iterator();
	//hasNext指的是当前引用的下一个
	//而next指的是当前对象的引用
	while(it.hasNext()){
		Object obj = it.next();
		System.out.println(obj);
	}

}

clear 清空集合
remove(obj) 移除指定的元素
removeAll() 移除所有元素
contains(Object o)‘; 利用equals比较, 查看集合中有没有指定的元素
contains(Collection<?> c) 查看集合中有没有指定的元素
toArray()把集合转成Object类型的数组

一、Set集合

Set集合不允许包涵相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。
Set判断两个对象是否相同不是使用==运算符,而是根据equals方法
HashSet是Set接口的典型实现,大多数时候使用Set集合时都是用这个实现类。
HashSet按Hash算法来存储集合中的元素,因此具有良好的存取和查找性能。
HashSet具有以下特点:
–不能保证元素的排列顺序
–HashSet不是线程安全的
–集合元素可以使Null

1、HashSet

1.1 HashSet是Set的最典型实现
1.2 HashSet 中不能有重复的元素。判定两个元素相等的标准,equals()方法返回true
1.3HashSet根据hashCode()值来存放元素,所以不能保证元素的顺序。
1.4HashCode()方法:如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同。

2、LinkedHashSet

1、LinkedHashSet是HshSet的子类
2、LinkedHashSet集合根据元素的hashCode值来决定元素的存储位置,但他同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
3、LinkedHashSet性能插入行能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能。
4、LinkedHashSet不允许集合元素重复

3、TreeSet

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。
–Comparator comparator()
–Object first()
–Object last()
–Object lower(Object e)
–Object higher(Object e)
–SortedSetsubSet(fromElement,toElement)
–SortedSetheadSet(toElement)
–SortedSettailSet(fromElement)
TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序。

1、默认情况学TreeSet要求集合中的元素必须实现Comparable接口,Comparable接口中只有一个方法,那就是。

//若返回0代表两个元素相等,若返回整数,代表当前元素大,若返回负数,代表当前元素小。
publiv int compareTo(T o)

TreeSet会调用每个元素的comparaTo()方法和集合中的每个已经有的元素去比较,进而决定当前元素在集合中的位置。

自然排序

TreeSet中的comparaTo方法

public int compareTo(Object o){
	if(o instanceof Person){
		Person person = (Person)o;
		//这个方是按照年龄的升序排列
		return this.age + person.age;
	}else{
		throw new ClassCastException("不能转为 Person 类型");
	}

}

TreeSet实例

//这创建实例对象的类
public class Student implements Comparable{
	 private String studentNanme;//定义的学生名字
	 private int score;//定义的分数
	 public String getStudentNanme() {
 	 return studentNanme;
	 }
	 public void setStudentNanme(String studentNanme) {
 		 this.studentNanme = studentNanme;
	 }
	 public double getScore() {
 		 return score;
	 }
	 public void setScore(int score) {
		  this.score = score;
 	}
	 @Override
	 public String toString() {
 		 return "Student [studentNanme=" + studentNanme + ", score=" + score
 + "]";
 + 
	 @Override//这个是比较的方法
	 public int compareTo(Object a) {
  	if(a instanceof Student){
  		 Student ko = (Student)a;
  	 return - this.score + ko.score;
 	 }else{
 	  throw new ClassCastException("");
 	 }
  
 	}
 }
//这个是测试TreeSet的类
public class TestTreeSet {
 public static void main(String[] args) {
  Scanner in = new Scanner(System.in);
  TreeSet treeset = new TreeSet();
 
  for(int i = 0 ; i < 5 ; i++){
   Student student = new Student();
   System.out.println("轻输入名字:");
   String name = in.next();
   System.out.println("请输入学生的成绩:");
   int  score = in.nextInt();
    student.setStudentNanme(name);
    student.setScore(score);
    treeset.add(student);
  }


  Iterator it = treeset.iterator();
  while(it.hasNext()){
   System.out.println(it.next());
  }
 }
}
定制排序

因为只有相同类的两个实例才会比较大小,所以向TreeSet中,重写该对象对应的equals()方法是,应保证该方法与compareTo(Object obj)方法有一致的结果:如果两个对象通过equals()方法比较返回true,则通过compareTo(Object obj)方法比较应返回 0

也可以通过创建Comparator对象来进行排序,代码如下:

Comparator comparator = new Comparator(){
	@Override
	public int compare(){
		if(o1 instanceof Student && o2 instanceof Student){
			Student stu1 = (Student)o1;
			Student stu2 = (Studnet)o2;
			return stu2.getScore() - stu1.getScore();
		}
		throw new ClassCastException("不能转换为 Student 对象");
	}
}

二、 List集合

List代表一个元素有序且可重复的集合,集合中的每个元素都有其对应的顺序索引
List允许使用重读元素,可以通过索引来访问制定位置的集合元素。
List默认按元素的添加顺序设置元素的索引。
List集合里面添加了一些根据索引来操作集合元素的方法。
– void add(int index ,Object ele)
–boolran assAll(int index,Collection eles)
–Object get(int index)
–int lastIndexOf(Object obj)
–Object remove(int index)
–Object set(int index,Object ele)
–List subList(int fromIndex,int toIndex)

List list = new ArrayList();
list.add(new Person1("Person",12));
//List所独有的遍历方式
for(int i = 0 ; i < List.size() ; i++){
	Object object = list.get(i);
	System.out.println(object);
}

Iterator it = list.iterator();
Syatem.out.println;w
while(it.hasNext()){
   System.out.println(it.next());
}

ArrayList和Vector
ArrayList和Vector是List接口的两个典型实现
区别:
–是一个古老的集合,通常建议使用ArrayList
–ArrayList是线程不安全的,而Vector是线程安全的。
–即使为保证List集合线程安全,也不推荐使用Vector
Array.adList(…)方法返回的List集合既不是ArrayList实例也不是Vector实例。
Array.asList(…)返回值是一个固定长度的List集合。

三、Map集合

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

1、coid clear() : 清空Map
2、boolean containsKey(Object key):Map中是否包含制定的Key。
3、boolean containsVlue(Object value):Map中是否包含指定的Value。
4、Set<Map.Entry<K,V>> entrySet() : 得到键值对对应的Entry的Set,借助于泛型。
5、V get(Object key):根据key返回对应的Value。
6、boolean isEmpty :检验Map是否为空。
7、Set keySet ( ) : 返回Key对应的集合,Set类型。
8、V put(k key,V value):放入一对键值对。
9、void putAll(Map<? extends K , ? extends V> m): 放入一组键值对。
10、V remove(Object key):移除指定键对应的键值对。
11、int size(): 返回Map容量的大小。
12、Collection values():返回Value对应的集合。

HashMap和HashTable
1、HashTable是一个古老的Map实现类,不建议使用
2、HashTable是一个线程安全的Map实现,但HashMap是线程不安全的。
3、HashTable不允许使用null作为key和value,而HashMap可以
4、与HashSet集合不能保证元素的顺序一样,Hashtable、HashMap也不能保证其中key-value对的顺序。
5、Hashtable、HashMap判断两个Key相等的标准是:两个Key通过equals方法返回true,hashCode值也相等。
6、Hashtable、HashMap判断两个Value相等的标准是:两个Value通过equals方法返回true

LinkedHashMap
LinkedHashMap 是HashMap的子类
LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-Value对的插入顺序一致

Properties
Properties 类是Hashtable的子类,该对象用于处理属性文件
由于属性文件里的key、value都是字符串类型,所以properties里的Key和Value都是字符串类型的

TreeMap
TreeMap存储Key-Value对时,需要根据Key对Key-value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态。
TreeMap的Key的排序:
-自然排序:TreeMao的所有的Key必须实现Comparable接口,而且所有的Key应该是同一个类的对象,都这佳凝灰跑出ClassCastException
-定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。此时不需要Map的Key实现Comparable接口

操作集合的工具类:Collections
Collections 是一个操作Set、List和Map等集合的工具类
Collections中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作:
-reverse(List):反转List中元素的顺序
-shuffle (List):对List集合元素进行随机排序
-sort(List):根据元素的自然顺序对制定List集合元素按升序排序
-sort(List,Comparator):根据制定的Comparator产生的顺序对List集合元素进行排序
-swap(List,int,int): 将指定list集合中的i元素和j元素进行交换

查找、替换
Object max(Collection):根据元素的自然顺序,返回给定集合中最大元素
Object max(Collection,Comparator): 根据Comparator制定的顺序,返回给定集合中的最大元素
Object min(Collection)
Object min(Collection,Comparator)
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值

如何得到一个县城安全的集合对象呢?

调用Collections 的synchronizedXxx 方法获取线程安全的集合对象。


List list = new ArrayLisy();
List list2 = Collections.synchronizedList(list);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值