Java学习笔记之Collection

一、Collection:单列

1.1 Collection集合常用方法

public boolean add(E e)			// 把给定的对象添加到当前集合中
public void clear()					//清空集合中所有的元素
public boolean remove(E e)	//把给定的对象在当前集合中删除
public boolean isEmpty()		//判断当前集合是否为空
public boolean contains(E e)//判断当前集合中是否包含给定的对象
public Object[] toArray()		//把集合中的元素,存储到数组中
public int size()						//返回集合中元素的个数

1.2 集合的三种遍历方式

  1. 迭代器:集合特有的遍历方式

    Collection<String> objs = new ArrayList<String>();		//多态
    objs.add("aa");
    objs.add("bb");
    objs.add("cc");
    Iterator<String> it = objs.iterator();		//通过集合对象获取迭代器对象
    while(it.hasNext()){ 											//判断迭代器对象中是否还有元素
     	 String s = it.next();									//有元素则获取,没有则结束程序
     	 System.out.println(s);
     	}
    
  2. 普通for:带有索引的遍历方式

    List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    for (int i=0; i<list.size(); i++){
      String s = list.get(i);
      Systems.out.println(s);
    }
    
  3. 增强for:只遍历元素,不能进行增删操作

    int[] arr = {1,2,3,4,5};
    for(int i:arr){						// for(元素的数据类型 变量名:容器对象)
    	System.out.println(i);
    }
    

1.3 两种子集合

1.3.1 List

特点:有索引,可以存储重复元素,可以保证存取顺序

List特有方法:

void add(int index, E element)		//将指定的元素添加到该集合中的指定位置上。
E get(int index)									//返回指定索引处的元素。
E set(int index, E element)				//修改指定索引处的元素,返回被修改的元素。
E remove(int index)								//删除指定索引处的元素, 返回被删除的元素。
- ArrayList:底层是数组实现的,查询快,增删慢
  • LinkedList:底层是链表实现的,查询慢,增删快

    LinkedList特特有方法:

    public void addFirst(E e)				//将指定元素插入此列表的开头。
    public void addLast(E e)				//将指定元素添加到此列表的结尾。
    public E getFirst()							//返回此列表的第一个元素。
    public E getLast()							//返回此列表的最后一个元素。
    public E removeFirst()					//移除并返回此列表的第一个元素。
    public E removeLast()						//移除并返回此列表的最后一个元素。
    public E pop()									//从此列表所表示的堆栈处弹出一个元素。此方法等效于addFirst
    public void push(E e)						//将元素推入此列表所表示的堆栈。			此方法等效于removeFirst
    
  • Vector:1.0版本用的,底层是数组实现的,是同步的(单线程)

1.3.2 Set

特点:无索引,不可以存储重复元素,存取不一定有序

Set集合存储元素不重复的原理:存储的元素重写hashCode()equals()方法

  • HashSet:无索引,不包含重复元素,不保证存取顺序。底层存储数据的结构是哈希表。

    1. 哈希表的底层在JDK1.8之前底层是数组+链表实现的;JDK1.8之后底层是数组+链表+红黑树(提高查询速度)实现的【如果链表的长度超过8位,就会将链表转换为红黑树】。

      数组结构把元素进行了分组,即相同哈希值的元素是一组;

      链表/红黑树结构把相同哈希值的元素连接到了一起。

    2. HashSet集合添加一个元素的过程:

      调用对象的hashCode()方法获取对象的哈希值 → 根据对象的哈希值计算对象的存储位置 →

      判断是否有元素存在 → 有元素则判断新元素的哈希值与所有已存在元素的哈希值是否相同 →

      若哈希值都相同则调用equals()方法判断对象内容是否相同 →

      若前三者判断都是false则存储该元素,否则说明元素重复,不存储,保证了元素的唯一性

  • LinkedHashSet:底层是哈希表(不可以存储重复元素)+链表(可以保证存取顺序)实现的。

  • TreeSet:底层是二叉树实现,元素有序,这里的顺序是指按照一定的规则进行排序。

    ​ 无参构造方法使用的是自然排序对元素进行排序的,即让元素所属的类实现Comparable接口,重写CompareTo方法。

    ​ 带参构造方法使用的是比较器排序对元素进行排序的,即让集合构造方法接受Comparator的实现类对象,重写Compare(To1, To2)方法。

    @Override
    public int compareTo(Student s){
    	return 0; //重复元素,不存储
    	return 1; //按照存储顺序,顺序排列
    	return -1;//按照存储顺序,逆序排列  
    }
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值