Collection

Collection : 无序可重复的单个对象`
Set : 无序不可重复
HashSet : 使用哈希算法实现的Set集合
基于数组,使用哈希算法让对象散列在数组中, 所以也称为散列表.
性能总是最好, 唯一的缺点是内存要求高.
适用场景 : 只要是内存大, 肯定选它.
内部使用的是一个HashMap…
TreeSet : 使用二叉搜索树实现的Set集合
二叉树的特点也是由Node对象组成
在java中的Tree使用的就是红黑树(自动平衡二叉搜索树), 保证它的最好的搜索性能
插入和删除速度慢, 原因是每个结点的插入都要和已有的大量元素进行比较
检索速度极快, 因为它是基于二分搜索
对内存要求低.
应用场景 : 主要主于搜索, 多用于数据的索引.
List : 有序可重复
ArrayList : 基于数组实现的List集合, 扩容1.5倍
数组的特点是内存连续, 是一个严格的线性结构
末端插入和删除数据最快, 数组[下标], 下标由计数器来决定
非末端插入和删除数据最慢, 因为会有大量的元素的移动.
对内存要求高, 内存必须连续.
检索速度尚可, 一般.
应用场景 : 保存归档的数据, 不需要频繁插入和删除, 只是检索…
LinkedList : 基于链表实现的List集合,
链表的特点是它是由一个一个的Node对象, Node的特殊之处在于内部有指针
任意位置的插入和删除都是极快的, 因为只需要修改几个指针
对内存要求低, 不要求内存连续.
检索速度最慢, 需要遍历节点时根据指针再去定位下一个结点.
应用场景 : 需要频繁的插入和删除操作的场景.

相关练习:
给定一个字符串, 统计每个字符出现的次数
方法一:

public static void main(String[] args){
String str = “asdfggfdfgf”;
int[] count = new int[26]; //用来存储小写字母a-z出现的次数。

	for(int i=0; i<str.length(); i++){
		
		char tmp = str.charAt(i); //依次取出每个字母
		int index = tmp - 97; //利用ascii码表,最小结果是0.
		count[index] = count[index] + 1;
	}	
	//循环打印每个字母出现次数
	for(int j=0; j<count.length; j++){
		if(count[j]!=0)
			System.out.println("字母"+(char)(j+97)+"出现次数:"+count[j]);
	}
}

方法二:

public static void main(String[] args){
String string = “erge5g1651651egr按了什么地方离开vs15qef”;
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
Integer count = map.get(ch);
if (count == null) { // 如果count为null, 说明没有put过,
count = 0; // count为0
}
map.put(ch, count + 1); // 如果没有put过, 直接put,如果Put过, 刷新老值
}
System.out.println(map);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值