黑马程序员—Collection类特点

------------- android培训java培训、期待与您交流!-------------

集合类特点:
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
集合中存储的都是对象的引用(地址)
集合运用简单示例:

ArrayList al =new ArrayList();//创建一个集合容器,使用Collection接口的子类,ArrayList
  al.add("diyigeyuansu");
  al.add("diergeyuansu");//添加元素
  al.remove("diyigeyuansu");//删除指定元素
  al.clear();//删除所有元素
  al.contains("diyigeyuansu");//判断指定元素是否存在
  al.isEmpty();//判断集合是否为空
  System.out.println(al);//打印集合
  ArrayList al2 = new ArrayList();
  al2.add("diyigeyuansu");
  al.retainAll(al2);//取交集,al中只会保留和阿里中相同的元素
  
  Iterator it = al.iterator();//获取迭代器,遍历集合中元素
  while(it.hasNext())
  {
   System.out.println(it.next());
  }

Collection类介绍:
1,List:
元素是有序的可以重复,因为集合体系有索引
 1)ArrayList:底层数据结构是数组结构。特点:查询速度快,增删稍慢,线程不同步
 2)LinkedList:底层数据结构是链表结构。特点:增删速度快,查询慢。
   -->LinkedList特有方法:
    addFirst();//在集合头添加元素
    addLast();//在集合尾添加元素
    getLast();getFirst();//获取元素,如果集合中没有,抛出异常。
    removeFirst();removeLast();//获取元素,并把它在集合中删除。如果没有此元素,抛出异常
    
    在JDK1.6之后出现的替代方法:
    
    offerFirst();offerLast();//添加元素
    peekFirst();peekLast();//获取元素,如果集合中没有,没有返回null
    pollFirst();pollLast();//获取元素,并把它在集合中删除。没有返回null
    
 3)Vector:底层数据结构是数组结构。线程同步。
   -->Vector特有的遍历方式:用Enumeration迭代

List特有方法示例

ArrayList al = new ArrayList();
  al.add("diyigeyuansu");
  al.add("diergeyuansu");
  al.add(1,"diyigeweizhi");//在指定位置添加元素
  al.remove(1);//删除指定位置元素
  al.set(1,"set");//修改元素
  al.get(0);//通过角标获取元素
  //获取所有元素
  for(int x=0;x<al.size();x++)
  {
   System.out.println(al.get(x));
  }  

 List集合特有的迭代器ListIterator是Iterator的子接口
 Iterator只能对元素进行判断、取出、删除操作
 ListIterator对元素有更多的操作方法
 List集合判断元素是否相同,依据是元素的equals方法。


2,Set:元素是无序的,元素不可以重复
 1)HashSet:底层数据结构是哈希表
  a)HashSet通过两个方法hashcode(),equals()来完成判断元素的唯一性。如果元素hashcode值相同,会再判断
  equals是否为true;如果元素hashcode值不同,不再调用equals.
  注意:对于判断元素是否存在,以及删除等操作,依据的方法是:hashcode(),equals()。
 2)TreeSet:底层是二叉树结构,可以对Set集合中的元素进行排序。保证元素唯一性的依据:compareTo方法返回0视为相同。
    TreeSet排序的第一种方式:让元素自身具备比较性。
    元素需要实现Comparable接口,覆盖compareTo方法。
    这种方式称为元素的自然顺序,或者叫做默认顺序。
    TreeSet排序的第二种方式:
    当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。
    定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
    当两种顺序都存在时,以比较器为主。
代码示例:

class Student implements Comparable// 该接口强制让学生具备比较性。
{
	private String name;
	private int age;

	Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public int compareTo(Object obj)// 复写compareTo方法
	{

		if (!(obj instanceof Student))
			throw new RuntimeException("不是学生对象");
		Student s = (Student) obj;

		if (this.age > s.age)
			return 1;
		if (this.age == s.age) {
			return this.name.compareTo(s.name);// 注意在主要条件比较相等之后,做次要条件比较
		}
		return -1;

	}

	public String getName() {
		return name;

	}

	public int getAge() {
		return age;
	}
}

class TreeSetDemo2 {
	public static void main(String[] args) {
		TreeSet ts = new TreeSet();// 按自然顺序排序

		// TreeSet ts = new TreeSet(new MyCompare());//按自定义比较器排序

		// 在集合中添加元素

		ts.add(new Student("lisi02", 22));
		ts.add(new Student("lisi02", 21));
		ts.add(new Student("lisi007", 20));
		ts.add(new Student("lisi09", 19));
		ts.add(new Student("lisi06", 18));
		ts.add(new Student("lisi06", 18));// 与上面重复,将不能被添加
		ts.add(new Student("lisi007", 29));
		Iterator it = ts.iterator();
		while (it.hasNext()) {
			Student stu = (Student) it.next();
			System.out.println(stu.getName() + "..." + stu.getAge());
		}
	}
}

class MyCompare implements Comparator// 创建自己的比较规则必须实现Comparator接口复写compare方法
{
	public int compare(Object o1, Object o2) {
		Student s1 = (Student) o1;
		Student s2 = (Student) o2;

		int num = s1.getName().compareTo(s2.getName());
		if (num == 0) {

			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));

		}

		return num;

	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值