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 ...
随机推荐
- IMX6开发板qt creator直接编译ARM架构程序
除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtc ...
- JavaScript下判断元素是否存在
1. 判断表单元素是否存在(一) if("periodPerMonth" in document.theForm) { return true; } else{ return fa ...
- Codeforces 1292A/1293C - NEKO's Maze Game
题目大意: 有一个2*n的图 NEKO#ΦωΦ要带领mimi们从(1,1)的点走到(2,n)的点 每次会操作一个点,从可以通过到不可以通过,不可以通过到可以通过 每操作一次要回答一次NEKO#ΦωΦ能 ...
- Gitbook在 Mac 环境上的安装及使用
一.在 Mac 环境上搭建 gitbook #.安装node.js,在node.js官网下载,直接安装稳定版本. https://nodejs.org/en/ #.检测 node.js 是否安装成功 ...
- 893B. Beautiful Divisors#美丽的因子(打表法)
题目出处:http://codeforces.com/problemset/problem/893/B 题目大意:找到一个数在二进制下,最大的以k个连续的1和k-1个连续的0组成的数字作为因子 #in ...
- [徐州网络赛]Longest subsequence
[徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...
- [LC] 207. Course Schedule
There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...
- Docker系列三:Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像 Dockerfile由一行行命令语句组成,支持#开头的注释 Dockerfile分为四部分:基础镜像信 ...
- 比率(ratio)|帕雷托图|雷达图|轮廓图|条形图|茎叶图|直方图|线图|折线图|间隔数据|比例数据|标准分数|标准差系数|离散系数|平均差|异众比率|四分位差|切比雪夫|右偏分布|
比率是什么? 比率(ratio) :不同类别数值的比值 在中文里,比率这个词被用来代表两个数量的比值,这包括了两个相似却在用法上有所区分的概念:一个是比的值:另一是变化率,是一个数量相对于另一数量的变 ...
- FireWall2
配置防火墙步骤: 1.给接口配置ip,开 service-manage 服务 2.把接口画在zone区域 3.配置策略 4.服务器一定要开启服务 1. interface GigabitEtherne ...