集合




1 集合概述
 】 List(接口)和Set(接口)实现了Collection接口,ArrayList(底层为数组)、LinkedList(双向链表)继承了List;
】HashSet、TreeSet、LinkedHashSet实现了Set,
】List存放的数据是按照数据添加顺序进行存储的并且数据可以重复,Set数据不能重复;
】TreeSet对存储的数据时进行排序后存储的(利用二叉树 结构)
】Map是另一个接口,HashMap实现了Map.

】Collection与数组的区别
 数组的容量 有限制,Collecion没有这种限制
Collection只能存放对象,数组没有限制。


2 List方法add()与addAll()的区别
   List L1=new ArrayList();
   L1.add("abd");
  L1.add("df");

 List L2=new ArrayList();
 L2.add(L1);则L2.size()=1;

L2.addAll(L1);则L2.size()=2;

3 遍历集合
】所有实现了Collection接口的集合类都有一个iterator()方法用以返回一个实现了Iterator接口的对象。
Iterator it = coll.iterator();

】boolean hasNext(); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
while(it.hasNext(){
System.out.print(it.next());

}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

LinkedHashSet
】输出结果与添加数据的顺序一致,内部使用链表来维护顺序。
1 Map的遍历
】通过keySet()方法获得一个set集合(存放的是Map中所有的键),通过遍历set获取值
】通过entrySet()方法得到一个包含 键-值对的集合Map.Entry<Object,Object>,通过Entry的getKey()getValue()方法获得值

            ( Map.Entry<>  Entry是Map集合中的一个内部接口, 并且是静态的,所以能点出来)
】通过values()方法获得所有值得集合
2 HashMap
 为了保证键不重复,需要再自定义的类中重写HashCode() equals()方法。键可以为空,线程不安全。

3 TreeMap
 存储的键可排序,实现比较器

4 HashTable,
】存储键值对
】线程安全
】键不能为空

5 Collections工具类
sort(List<T> list)
          根据元素的自然顺序 对指定列表按升序进行排序。

 sort(List<T> list, Comparator<? super T> c)
          根据指定比较器产生的顺序对指定列表进行排序。




】 TreeSet(排序好存储到集合中)

package com.kk;

public class Student implements Comparable<Student>{
	private String name;
	private int score;
	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}
 //先按分数从小到大排列,如果分数相同
 //就按姓名字母自然排列(默认从小到大)
      @Override
	public int compareTo(Student o) {
	 if(this.score<o.score)
		 return -1;
	 else if(this.score>o.score)
		 return 1;
	 else{
		 return this.name.compareTo(o.name);
		 
	 }
		
	}
	

}

 


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Student s1=new Student("zhang san", 80);
		Student s2=new Student("a san", 80);
		Student s3=new Student("b san", 80);
		Student s4=new Student("b san", 70);
		Set<Student> s=new TreeSet<Student>();
		s.add(s1);
		s.add(s2);
		s.add(s3);
		s.add(s4);
		
		Iterator<Student> it=s.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	
		
	}

<span style="font-size:32px;"><strong>}

 
</strong></span>

】满足不同需求的比较器(TreeSet)

package com.kk;

import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;


/**用java.util.Comparator比较器可以满足不同的需求
 * @author Administrator
 *
 */
public class Main {


	
	public static void main(String[] args) {
		Book b1=new Book("cc", 20);
		Book b2=new Book("java", 20);
		Book b3=new Book("c", 50);
		Set<Book> s=new TreeSet<Book>(new myCom2());
//		Set<Book> s=new TreeSet<Book>(new myCom1());
		s.add(b1);
		s.add(b2);
		s.add(b3);
		System.out.println(s);

 }
}
/*图书:书名,价格
 * 先按价格从小到大,再按书名从小到大
 * 
 */

class myCom1 implements Comparator<Book>{

	@Override
	public int compare(Book o1, Book o2) {
		if (o1.getPrice()<o2.getPrice())
			return -1;
		else if(o1.getPrice()>o2.getPrice())
			return 1;
		else{
		return	o1.getName().compareTo(o2.getName());
		}
		
	}
	
}
/**先按价格从大到小,再按书名从大到小
 * @author Administrator
 *
 */
class myCom2 implements Comparator<Book>{

	@Override
	public int compare(Book o1, Book o2) {
		if (o1.getPrice()<o2.getPrice())
			return 1;
		else if(o1.getPrice()>o2.getPrice())
			return -1;
		else{
		return	(o1.getName().compareTo(o2.getName()))*-1;
		}
		
	}
	
}







】HashSet(根据哈希算法保证数据的不重复性)

package com.kk;


/**自己定义的类要想保证在HashSet中元素不重复
 * 需要重写HashCode()和equals()方法
 * 
 * @author Administrator
 *
 */
public class Student {
	private String name;
	private int score;
	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + score;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (score != other.score)
			return false;
		return true;
	}


}

package com.kk;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * @author Administrator
 *
 */
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Student s1=new Student("zhang san", 80);
		Student s2=new Student("a san", 80);
		Student s3=new Student("a san", 80);
		Set<Student> s=new HashSet<Student>();
		s.add(s1);
		s.add(s2);
		s.add(s3);
		
		Iterator<Student> it=s.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	
		
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值