集合(new)

阿T臭臭
在这里插入图片描述

硬性知识点:

package comD;
/*
 * 	接口没有toString方法
 * */
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class newCollection {
	public static void main(String[] args) {
		Collection<String> c1=new ArrayList<String>();	
		c1.add("ff");
		c1.add("ff1");
		c1.add("ff2");
		c1.add("ff3");
		c1.add("ff4");
		c1.add(" ");
		System.out.println(c1);//结果为[ff, ff1, ff2, ff3, ff4,  ]
	}
}
  • 为什么集合对象可以打印出来?
    当println方法打印c1的时候,c1调用了ArrayList的toString方法,所以结果会被重写。(引用c1指向ArrayList集合的对象,语句System.out.println(c1);就相当于把c1当做实参传给了println、方法,但是println()方法并没有重写toString,原因是被ArrayList继承的类中重写了toString,)

  • 当已经获得了Iterator迭代器之后,如果再通过Collection的add(),remove(),clear()改变集合结构,在使用迭代器的next方法调用下一个元素的时候,会出异常

  • 迭代器遍历一遍之后,如果还需要重新遍历一遍,需要重新获得一遍迭代器,因为游标已经指向了最下方

  •   ①实现Comparable接口    
      ②指定一个Comparator比较器
      当两种方法同时存在的时候,自动使用Comparator比较器
    

问题:Custorm c1=new Custorm(“dbc”,8);
Custorm c2=new Custorm(“vbc”,31);
Custorm c3=new Custorm(“cbc”,20);

Map

Map按<键,值>对的形式存储数据
put(k,v)
values()
containsKey(k)
containsValue(v)
get(k)
remove(k)
keySet()
Set entrySet()

  • HashMap
    1)工作原理:底层是哈希表(数组的每一个元素都是一个单项链表),键的集合就是一个HashSet,添加元素的时候,先调用hashCode计算出哈希值(数组下标),如果单向链表中不存在,直接添加,如果单向链表中存在,调用equlas比较键的内容,覆盖掉原本存在的key值和value值
  • HashTable
    1)同HashMap,不同的是,它是线程安全的,但在多线程情况下也不会使用,效率过低。
    2)HashTable中的重点类Properties
    ①键值对都是String字符串
    ②常用于设置/读取系统属性值
    ③setProperties
    ④getProperties
    ⑤通过Properites类读取配置文件
  • TreeMap
    1)TreeMap实现了SortedMap,可以根据键自然排序,排序的原理是二叉树原理(TreeMap中的键采用中序遍历)
    2)TreeMap中的键必须是可比较的
    ==========================================
  • Map集合如何选择
    1) 如果不需要根据键排序就选择HashMap
    2)如果需要根据键排序,就选择TreeMap
  • HashMap中的键需要重写equals()和hashCode()
  • TreeMap中的键是根据Comparator/Comparable的比较结果是否为零来判断是否相同,为零,键相同,不为零,直接排序

Collection

1)Collection存储数据时是单个存储的,只能存储引用类型数据
2)add() remove() iterator()contains()

  • List集合
    1)有序,可重复
    2)为每个元素指定了一个索引值
    3)add(index,o) remove(index) get(index) sort(Comparator)
  • ArrayList
  • Vector
    1)底层是数组,访问快,添加删除慢
    2)初始容量为10
    3)扩容:ArrayList是1.5倍,Vector是2倍
    4)Vector是线程安全的,ArrayList不是线程安全的
  • LinkedList集合
    1)底层是双向链表,添加删除效率高,访问慢
    ============================================
  • List集合如何选择
    1)ArrayList应用于以查询访问为主,很少进行添加删除操作
    2)LinkedList应用于频繁的进行添加删除操作的情况
  • Set集合
    1)无序,不可重复
  • HashSet
    1)底层是HashMap
    2)HashMap就是HashMap键的集合
  • TreeSet
    1)底层是TreeMap
    2)TreeSet就是TreeMap的键的集合
    3)TreeSet实现SortedSet接口,可以对元素自然排序,要求元素必须是可比较的
    3.1
    创建TreeSet时指定Comparator比较器
    3.2
    如果没有实现Comparator比较器,元素的类要实现Comparable接口
    ============================================
  • 如何选择HashSet还是TreeSet?
    1)如果不需要进行排序选择HashSet
    2)如果需要根据某个字段排序,选择TreeSet
    ============================================
  • List集合与HashSet集合判断是否是同一个元素,需要调用对象的equals方法,元素的类需要重写equals方法
  • TreeSet集合判断是否是同一个元素,根据Comparator/ Comparable的比较结果会否为零判断,如果比较结果为零,就认为是同一个元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值