Java集合总结

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

1:Collection
 Collection(集合)接口,直系子接口List,Set.只能存储单个元素,不能存储基本数据类型,可以存储对象,或者引用数据类型
 |--List 元素有序,可重复.
  add(index,Object),get(index),set(index,Object),listIterator()
  |--ArrayList 数据结构是数组,不是同步的.查询效率高,增删效率低.
  |--Vector 数据结构是数组,是同步的.所以,它查询,增删效率都低.
   addElement(Object),elementAt(index),elements();
  |--LinkedList 数据结构是链表,不是同步的.查询效率低,增删效率高.
   removeFirst()----pollFirst()
   1.6后,对获取,移除等方法进行了改进,
   改进前,集合为空时,会发生一个NoSuchElementException异常.
   改进后的方法,但集合为空时,会返回给我们一个null.
 Set
 |--HashSet 底层数据结构是哈希表
  如何去掉重复值的呢?
  需要重写hashCode和equals方法.
   1:先判断hashCode值是否想等.
   2:如果不相等,则直接存储数据.
     如果相等,继续跟进equals方法进行判断(equals里面使我们自己写的)
 |--LinkedHashSet 底层数据结构是哈希表和链表 能够让Set看起来有序.
     由哈希结构保证数据的存储.由链表结构保证元素有序.
 |--TreeSet 底层数据结构是二叉树
  是可以对元素进行排序的Set集合.

   排序有两种方式:
    1:自定义对象实现Comparable接口
    2:自定义比较器(实现Comparator接口)
    以自定义比较器为主. 

2:Map

Map采用键值对的存储方式.这点与Collection不同.
 (1)是一个以键值对的方式存储数据的.
 (2)Map 键唯一
  put(k,v),remove(k),keySet(),entrySet(),get(k),size()
  |--Hashtable
   底层数据结构是哈希表,同步.
  |--HashMap
   底层数据结构是哈希表,不同步.
   |--LinkedHashMap
  |--TreeMap
   |底层数据结构是二叉树,不同步. 

 

举例:通过TreeSet集合实现可重复元素加入,并且通过两种排序方法对元素进行排序.

//定义的学生类.
package IO_Demo;

public class Student implements Comparable<Student>{

 private String name;
 private int age;
 private int score;
 public Student() {
  super();
 }
 public Student(String name, int age, int score) {
  super();
  this.name = name;
  this.age = age;
  this.score = score;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public int getScore() {
  return score;
 }
 public void setScore(int score) {
  this.score = score;
 }
 @Override//排序一:实现compareTo方法实现按年龄排序,
 public int compareTo(Student s) {
  int x = 0;
  if(this.age>s.age){
  x=1;
  }else//这里可以添加重复元素不要返回为0的情况.
   x=-1;
  return x;
  
 }
 
 
}

//创建TreeSet集合,并初始化.
package IO_Demo;

import java.util.Iterator;
import java.util.TreeSet;

/*
 用TreeSet集合实现可重复,并按自己的意思实现排序
 */
public class TreeSet_Demo {
 public static void main(String[] args) {
  TreeSet<Student> ts = new TreeSet<Student>(new compareByScore());
  ts.add(new Student("张三", 23, 84));
  Student s1 = new Student("李四", 25, 97);
  ts.add(s1);
  ts.add(new Student("李四", 25, 97));
  ts.add(new Student("老毕", 46, 66));
  ts.add(new Student("王五", 45, 88));
  ts.add(new Student("王麻子", 33, 86));
  ts.add(new Student("张三", 23, 84));

  Iterator<Student> it = ts.iterator();
  while (it.hasNext()) {
   Student s = it.next();
   System.out.println(s.getName()+"," + s.getAge()+"," + s.getScore());
  }
 }
}

//排序二:Comparator接口.自定义比较器安装成绩排序

package IO_Demo;

import java.util.Comparator;

public class compareByScore implements Comparator<Student> {

 @Override
 public int compare(Student s1, Student s2) {
  int x = 0;
  if(s1.getScore()>s2.getScore()){
   x=1;
  }else{
   x=-1;
  }
  return x;
 }

}

 

 

 

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值