java基础学习——集合
-------|List: 有存储顺序, 可重复
-----------|ArrayList: 数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
-----------|LinkedList: 链表实现, 增删快, 查找慢由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删 效率较高但查询时需要一个一个的遍历, 所以效率较低
-----------|Vector: 和ArrayList原理相同, 但线程安全, 效率略低和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低
-------|Set: 无存储顺序, 不可重复
-----------|HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
-----------|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。
-------| Map: 键值对 键不可重复,键可以重复
-----------|HashMap 线程不安全,存取速度快。底层是以哈希表实现的.
-----------|TreeMap 红-黑树的数据结构,默认对元素进行自然排 序(String)。如果在比较的时候两个对象返回值为0,那么元素重复
-----------|HashTable 底层也是使用了哈希表 维护的,存取的读取快,存储元素是 无序的。
一、HashSet集合:无序存储,不可重复
当我们想创建一个hashset集合,往HashSet内添加元素的时候,会首先调用HashCode方法得到哈希值,然后把哈希值经过运算 算出来该元素在哈希表中位置,如果该位置不存在别的元素则直接加进去,如果存在别的元素则调用equals()方法与该位置上的方法比较一次。
1.元素为string类型,可以直接用HashSet<string>集合来创建,string集合重写了hashcode()和equals()方法
2.元素为自定义对象,需要重写重写了hashcode()和equals()方法。
class Person {
int id;
String name;
public Person (int id, String name ){
super();
this.id= id;
this.name= name;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
}
@Override
public boolean equals(Object obj) {
Person person = new Person(id, name);
return this.id==person.id;
}
@Override
public String toString() {
return "编号:"+this.id+" 姓名:"+this.name +" hashcode:"+this.hashCode();
}
}
public class demo1 {
public static void main(String[] args) {
HashSet<Person> set = new HashSet<Person>();
set.add(new Person(001,"jjj"));
set.add(new Person(001,"jjj"));
System.out.println("集合的元素:"+set);
}
}
运行结果:
集合的元素:[编号:1 姓名:jjj hashcode:1]
二、集合的遍历
public static void main(String[] args) {
ArrayList<String > list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println("----------get方式遍历----------");
for (int i = 0; i < list.size(); i++) {
System.out.println(i+":"+list.get(i));
}
//迭代器遍历
HashSet<String > hashSet = new HashSet<>();
hashSet.add("老大");
hashSet.add("老二");
hashSet.add("老三");
System.out.println("---------迭代器遍历----------");
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
for(String item:hashSet){
System.out.println(item+",");
}
Map<String , String > map = new HashMap<String , String >();
map.put("001","z001");
map.put("002","z002");
map.put("003","z003");
Set<Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());
}
}
java基础学习——集合的更多相关文章
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Java基础学习--集合
集合 List集合的特点 1.有序的数据集合,存储元素和取出元素的顺序是一致的(存储123,取出123) 2.有索引,包含了一些带索引的方法 3.允许存储重复的元素 List接口中带索引的方法 add ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 第6节:Java基础 - 三大集合(上)
第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!
前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
随机推荐
- 八数码问题+路径寻找问题+bfs(隐式图的判重操作)
Δ路径寻找问题可以归结为隐式图的遍历,它的任务是找到一条凑够初始状态到终止问题的最优路径, 而不是像回溯法那样找到一个符合某些要求的解. 八数码问题就是路径查找问题背景下的经典训练题目. 程序框架 p ...
- Protocol Buffers与FlatBuffers效率对比
Protocol Buffers是Google跨语言.跨平台的通用序列化库.FlatBuffers同样出自Google,而且也跨语言跨平台,但更强调效率,专门为游戏开发打造.在游戏界混了几年,各种各样 ...
- Linux Shell 1 - Print from terminal
Two ways to print info from terminal - echo & printf - Echo a. Exclamation mark is supported in ...
- java中创建多线程两种方式以及实现接口的优点
多线程创建方式有两种 创建线程的第一种方式.继承Thread类 1.继承Thread类 2.重写Thread类中的run方法--目的将自定义代码存储在run方法.让线程执行3.调用线程的start() ...
- 序列化之protobuf与avro对比(Java)
最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了pro ...
- Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法
背景: PHP程序常用的数据库是Mysql数据库,但是由于实际项目需要,要求PHP网站连接SQL Server数据库查询一些必要信息.因此,本文就来给大家介绍一下如何安装及配置PHP扩展,可以实现PH ...
- HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加 ...
- Ubuntu 16.04 + CUDA 8.0 + cuDNN v5.1 + TensorFlow(GPU support)安装配置详解
随着图像识别和深度学习领域的迅猛发展,GPU时代即将来临.由于GPU处理深度学习算法的高效性,使得配置一台搭载有GPU的服务器变得尤为必要. 本文主要介绍在Ubuntu 16.04环境下如何配置Ten ...
- 一步一步学J2SE-HashMap的实现原理
HashMap数据结构图 HashMap的数据结构是通过数组加链表实现的.数组是HashMap的主体,链表是为了解决Hash碰撞问题. HashMap的Get方法 1. 在get的时候首先判断key ...
- Leetcode Pasacl'sTriangle
对于Vector的用法,实在是知道的太少,算法思想比较简单,核心也就一行代码,但是实现错误就显示平时代码的不熟悉. Given numRows, generate the first numRows ...