java基础-略知一二
Collection
集合中只能放置对象的引用,不能放置原生数据类型。
常用方法:
1 |
// 将所有元素从一个列表复制到另一个列表 |
Set
实现类:HashSet,LinkedHashSet.
子接口:SortSet,TreeSet.
不包含重复元素,最多包含一个null,元素没有顺序。
HashSet
HashSet不是Ordered也不是Sorted,存储对象引用时是按照哈希策略来实现的,
HashSet中是否存在一个对象是通过equals()和hashCode()协同判断,不保证顺序。
构造方法
1 |
public HashSet() |
1 |
public HashSet(Collection c) |
HashSet底层是使用HashMap实现的
HashSet的add()方法详解:
判断已经存储在集合中的对象hashCode值是否与增加对象的hashCode值一致。
如果不一致,直接加进去。
如果一致,再进行equals()比较,如果equals()返回true,对象已经存在不增加进去,如果equals()返回false,把对象增加进去。
LinkedHashSet
LinkedHashSet是Ordered,采用双链表实现的,有固定顺序,也就是插入顺序。
LinkedHashSet底层是使用LinkedHashMap实现的。
构造方法
1 |
public LinkedHashSet() |
SortedSet
保证迭代器按照元素递增顺序遍历的集合,可以按照元素的自然顺序进行排序。
常用方法:
1 |
Object first() |
TreeSet
TreeSet是SortedSet接口的实现,元素不论以什么元素插入,在遍历的时候,都会以天然顺序遍历。因为它是自带排序的,所以如果想要增加自定义类型就必须指定排序的规则。
TreeSet底层是使用TreeMap实现的。
构造方法
1 |
public TreeSet() |
List
具有列表的功能,元素顺序均是按添加的先后进行排列的,允许重复的元素,允许多个null元素。
常用方法
1 |
List list = new ArrayList(); |
ArrayList
构造方法
1 |
public ArrayList() |
ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组。
当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,当新数组无法容纳增加的元素,重复该过程即可。
LinkedList
LinkedList功能与ArrayList,Vector相同,内部是依赖双链表实现的,因此有很好的插入和删除性能,但随机访问元素的性能很差。
构造方法
1 |
public LinkedList() |
LinkedList类中有一个Entry内部类,Entry内部类包含3个部分向前的引用,向后的引用,数据
1 |
header.next = header.previous = header; |
Map
Map接口中键和值一一映射. 可以通过键来获取值.
特性
- 给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。
- 当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常。
- 当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
- 当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。
- 当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。
方法
| 1 | void clear( ) 从此映射中移除所有映射关系(可选操作)。 |
|---|---|
| 2 | boolean containsKey(Object k) 如果此映射包含指定键的映射关系,则返回 true。 |
| 3 | boolean containsValue(Object v) 如果此映射将一个或多个键映射到指定值,则返回 true。 |
| 4 | Set entrySet( ) 返回此映射中包含的映射关系的 Set 视图。 |
| 5 | boolean equals(Object obj) 比较指定的对象与此映射是否相等。 |
| 6 | Object get(Object k) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 |
| 7 | int hashCode( ) 返回此映射的哈希码值。 |
| 8 | boolean isEmpty( ) 如果此映射未包含键-值映射关系,则返回 true。 |
| 9 | Set keySet( ) 返回此映射中包含的键的 Set 视图。 |
| 10 | Object put(Object k, Object v) 将指定的值与此映射中的指定键关联(可选操作)。 |
| 11 | void putAll(Map m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。 |
| 12 | Object remove(Object k) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 |
| 13 | int size( ) 返回此映射中的键-值映射关系数。 |
| 14 | Collection values( ) 返回此映射中包含的值的 Collection 视图。 |
HashMap
常用操作
1.第一步就是给HashMap里面put一些键值对。
1 |
HashMap<Integer, Integer> hashMap = new HashMap<>(); hashMap.put(5, 2); |
2.containsKey(Object key)方法,返回值为boolean,用于判断当前HashMap中是否包含key对应的key-value。
3.containsValue(Object value)方法,返回值为boolean,用于判断当前HashMap中是否包含value对应的key-value。
4.遍历HashMap的两种方式:
1)利用haspmap.entrySet().iterator():利用迭代器,从Entry中取出键、取出值,推荐使用这种方式进行遍历,效率较高:
1 |
Iterator<Entry<Integer, Integer>> iterator = hashMap.entrySet().iterator(); |
2)利用hashmap.keySet().iterator():利用键的迭代器,每次取出一个键,再根据键,从HashMap中取出值,这种方式的效率不高,不推荐使用:
1 |
Iterator<Integer> iterator2 = hashMap.keySet().iterator(); |
Iterator
在Java中Iterator为一个接口,它只提供了迭代了基本规则,在JDK中他是这样定义的:对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:
1 |
1、迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。 2、方法名称得到了改进。 |
接口定义:
1 |
public interface Iterator {
|
Object next():返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换成自己需要的类型。
boolean hasNext():判断容器内是否还有可供访问的元素。
void remove():删除迭代器刚越过的元素。
未完待续~~~
java基础-略知一二的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- java基础学习03(java基础程序设计)
java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...
- Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...
随机推荐
- Linux实验总结(第二周)
测试一--vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程截图,要全屏,包含自己的 ...
- Utf8BomRemover
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler ...
- webservice SOA
------------------认证问题
- Different Gene Frequencies in the Two Sexes
I.7 Different Gene Frequencies in the Two Sexes 假设存在一种基因仅在第一代亲代的不同性别之间的概率有区别,比如,A 在male中频率是Pm,a是(1-P ...
- centos mysql无法删除数据库
系统版本是CentOS Linux release 7.4.1708 (Core) 数据库版本mysql Ver 14.14 Distrib 5.6.39 在执行drop database ga-s ...
- 基于rtmp的移动端推流解决方案
因工作需要,及考虑成本因素,需要探索一套免费的移动端基于rtmp推流的直播解决方案,过程虽稍显曲折,但最终还是完成了目标.在这里将记录下来,以便日后查阅. 总体思路 移动端推流(RTMP) ---&g ...
- Matlab高级教程_第三篇:Matlab转码C/C++方式(混编)_第一部分
0. 其实Matlab的转码混编大多数就是为了现成的算法函数不用再写了,2就是为了方便提高代码运行速度用C语言去运行. 1. MEX文件: Mex文件是一种可在matlab环境中嗲用C语言(或fort ...
- Octave 常用命令
GNU Octave 官方文档 GNU Octave Documentation(Online) GNU Octave Documentation(PDF) 安装额外的包 Installing and ...
- for in 循环获取json中的键(key)与值(value)
一 .for in 循环 1.获取json中的键(key)与值(value): var data = {name:'张三',age:'20岁',sex:'男'}; for (var a in data ...
- Java程序员常用Linux性能分析命令
性能分析 vmstat 虚拟内存统计 用法 Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive ...