-------|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基础学习——集合的更多相关文章

  1. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  2. Java基础学习--集合

    集合 List集合的特点 1.有序的数据集合,存储元素和取出元素的顺序是一致的(存储123,取出123) 2.有索引,包含了一些带索引的方法 3.允许存储重复的元素 List接口中带索引的方法 add ...

  3. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  4. 第6节:Java基础 - 三大集合(上)

    第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...

  5. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  6. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  7. 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

    前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...

  8. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  9. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

随机推荐

  1. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  2. 记Angular与Django REST框架的一次合作(2):前端组件化——Angular

    注:这是这个系列的第二部分,主要集中在Angular的使用方面.之前使用过AngularJS(Angular 1.x),混在Django的模板中使用,这些页面一般完全是结果展示页.在有Django表单 ...

  3. Java中Scanner的输入流的关闭问题

    为什么Scanner in语句只能关闭一次,且对于其他任何Scanner输入流也关闭? 代码如图 import java.util.Scanner; public class ScannerTest  ...

  4. 自定义Git之忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...

  5. LoadRunner入门(二)

    三.设计场景 1.打开Controller 2.选择运行的脚本 3.场景设置 3.1修改场景模式 点击scenario-convert- 修改场景百分比模式 (1)Group Name:脚本名称 (2 ...

  6. 安徽省2016“京胜杯”程序设计大赛_I_恶魔A+B

    恶魔A+B Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 73 Accepted: 17 Description 相信大家 ...

  7. Hibernate_01

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  8. NOIP2000提高组 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  9. DB2的日志理解难点

    在DB2中最早的recovery时间点,是由minBuffLsn 和 lowTranLsn 的最小值决定的. minBuffLsn: represents the oldest change to a ...

  10. js版贪吃蛇

    之前没有写博客的习惯,这是我的第一个博客,有些的不好的地方,希望大家多多提意见 js版的贪吃蛇相对比较简单,废话不多说直接上代码,有需要注意的地方我会标红,github源码地址https://gith ...