IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
|
NIIT第二十一天 |
||
|
上午 |
集合 |
1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center",align是键,center是值 |
|
ArrayList |
1. ArrayList类型的集合,在查询效率上非常的高,但是对于对数据的增删改,则效率很低 2.在使用集合存储数据时,在一个集合中应该尽量的存储相同数据类型的数据,这样可以在对数据进行查询时,提高查询效率 |
|
|
闲谈 |
1.只要对象继承自Iterable接口,则该对象就可以进行迭代,迭代即:对序列进行遍历并选择序列中的对象【引文】 2.在传入方法的参数是对象时,Object类型参数可能更灵活,但是Object参数无法访问到特定子类的特有方法或属性,因为父类时“看不到”子类中独有的方法或属性,而类在实现接口时,必定会实现接口中的方法,虽然接口也不能访问到实现类的独有的方法,但是接口中定义的所有抽象方法,实现类中必定会对其进行“重写”,因此传递到方法的参数是接口类型必定是实现类中具体实现的方法,而继承,子类不一定会重写父类的方法,因此,实际访问的就可能会是父类中的方法,所以,在灵活性等方面,接口参数的使用会优于父类Object参数类型,最起码,传入接口类型的参数是有目的的,而且,一定可以访问到实现类的方法,因为实现类需要对接口中所有的方法进行“重写” 3.泛型数据类型,在集合声明时的应用,避免了在想集合中存储数据时,传入其他类型的数据 4.关于变量声明时,数据类型的选择: (1)如果不需要限制变量的类型,并且不会当做参数传入方法中进行使用,可以写成具体的某种数据类型,如:集合ArrayList (2)如果该变量可能会传入方法进行使用,并且希望传入方法的参数更具灵活性,这时可以将变量的类型声明为【接口】的类型,这样只要是实现了该接口的实现类,都可以传入方法进行使用,并且所有抽象方法都已经被实现,如:集合可以写成List,在参数的具体类型方面就有可能是:ArrayList或LinkedList (3)在jdk的系统类中,大部分的实现类,都并没有多么的扩充接口中的方法数量,就是说,接口中的方法实现类都实现了,而实现类中并没有多少多余的特有的方法,因此方法的参数写成接口类型,可能更具灵活性 |
|
|
下午 |
ArrayList |
1.集合中如果存储的是对象数据类型,在进行对其元素进行比较时,有必要对equals()方法进行重写【示例代码】 2.集合ArrayList石非线程安全,但是执行的效率高,Vector是线程安全;线程安全:即:某一时刻有且只能有一个线程能够写Vector,即加锁,避免多线程同时写数据引起不一致性,为此也会消耗很多资源【引文】 |
|
LinkedList |
1.集合LinkedList对于数据的增删改,效率非常高,而查询的效率则很低,因为LinkedList对是以“链表”的形式存储数据的,因此,在增删改操作时,不需要大规模的变动的其他数据,只需要修改上下节点的指向就可以了 2.在对LinkedList集合的数据进行操作时,尽量的选用**first**或**last**的操作方法,执行的效率会更高 3.Collections对集合进行操作时,synchronizedList方法的使用,对数据进行包装,以防止数据被非线程安全访问 |
|
|
Set |
1.集合Set存储的数据是无序,并且所有存储的元素都不会重复,如果发现重复数据的写入,则会覆盖之前相同的数据 2.如果HashSet集合中存储的是对象,则对数据进行写入到集合时,要避免java系统错误的把“相同”的数据写入,则有必要重写hashCode方法和equals方法【示例代码】 |
|
|
Map |
1.HashMap存储的数据时,键值对的形式存储的 |
|
|
晚上 |
||
|
笔记 |
1.在对集合中的数据进行查询操作时,建议选用ArrayList类型的集合,查询效率非常高 2.在对集合中的数据进行增删改操作时,建议用LinkedList类型的集合,对于数据的更改效率非常高 3.如果对象继承Iterable接口,则该对象可进行迭代操作,即集合遍历并选择序列中的对象 4.在声明集合类型数据时,尽量加上泛型,即<E>,可以防止不同类型的数据的写入 5.在对集合中的对象类型的数据进行比较或插入(避免重复对象)时,有必要重写equals()方法, 6. ArrayList集合石非线程安全,但是操作效率高,而Vector集合则是线程安全,即同一时刻,有且只能有一个线程能操作数据;对ArrayList非线程安全数据操作时,可以使用Collections中的synchronizedList进行转换成线程安全,再进行操作 7. LinkedList集合在操作数据时,建议使用**first**或**last**放法对数据进行操作,利于链表结构的数据操作 9.Set集合中的元素不允许存在相同的元素(当然存储之前可能需要重写equals方法,待验证),因此可以利用此集合对“数据库”中的数据进行整理归类,在向set集合中写入数据时,有必要重写原来的hashCode方法和equals方法,来避免相同的对象被错误的写入 10.HashMap集合存储的是键值对类型的元素数据 11.对于方法参数的声明上,尽量的选用接口数据类型,可能会更具灵活性;相比于传入父类的数据类型,接口类型会更具针对性和灵活性 |
|
IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】的更多相关文章
- Arraylist 和 linkedlist || hashset 和treeset. || hashMap 和 TreeMap
参考:http://liuyuan418921673.iteye.com/blog/2256120 1. ArrayList和LinkedList的区别和使用场景 ArryList 与linked ...
- ArrayList和LinkedList有什么区别?
---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而Linked ...
- 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...
- 数组Array和列表集合ArrayList、LinkedList和Vector的区别
一.ArrayList和Vector的区别 ArrayList与Vector主要从以下方面来说. 1.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同 ...
- HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...
- Java集合源代码剖析(一)【集合框架概述、ArrayList、LinkedList、Vector】
Java集合框架概述 Java集合工具包位于Java.util包下.包括了非常多经常使用的数据结构,如数组.链表.栈.队列.集合.哈希表等.学习Java集合框架下大致能够分为例如以下五个部分:List ...
- Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别
本篇博客主要讲解List接口的三个实现类ArrayList.LinkedList.Vector的使用方法以及三者之间的区别. 1. ArrayList使用 ArrayList是List接口最常用的实现 ...
- java集合【12】——— ArrayList,LinkedList,Vector的相同点与区别是什么?
目录 特性列举 底层存储结构不同 线程安全性不同 默认的大小不同 扩容机制 迭代器 增删改查的效率 总结一下 要想回答这个问题,可以先把各种都讲特性,然后再从底层存储结构,线程安全,默认大小,扩容机制 ...
- 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结
List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. ...
随机推荐
- Android 类似未读短信图标显示数字效果的分析
之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下, 原理 一个应用要实 ...
- 【Java】 实现一个简单文件浏览器(2)
接着上篇文章 接下来说下程序右侧的文件内容表格如何实现 FileTable类: FileTable基础于JTable类,构造函数里用setDefaultRenderer设置每行默认的渲染器为FileT ...
- codeforces 609E. Minimum spanning tree for each edge 树链剖分
题目链接 给一个n个节点m条边的树, 每条边有权值, 输出m个数, 每个数代表包含这条边的最小生成树的值. 先将最小生成树求出来, 把树边都标记. 然后对标记的边的两个端点, 我们add(u, v), ...
- cocos2d-x spine 加载粒子特效
spine骨骼加载粒子效果 将粒子效果加到骨骼上,update位置和角度.h#ifndef __HOMESCENE_H__#define __HOMESCENE_H__#include "c ...
- C# Convert an enum to other type of enum
Sometimes, if we want to do convert between two enums, firstly, we may think about one way: var myGe ...
- 高质量程序设计指南C/C++语言——malloc/free使用要点
- 为Firefox 添加自定义搜索引擎
网上流传的 about:config[对于新版已经失效] 以及到Firefox安装目录中修改 的方式不知道为什么我没有成功 现在来个简单点得! 首先我们需要一个可以自定义搜索引擎的插件 Organiz ...
- RFID介绍及电子标签成本预估
What is RFID • RadioFrequencyIdentification, (無線射頻識別系統)• 通常是由感測器(Reader)和RFID標籤(Tag)所組成的系統 RFID分類 • ...
- Delphi中的内存对齐 与 Packed关键字
以delphi为例:TTest = recordc1: char;i1: Integer;c2: char;c3: Char;end;这个结构如果用sizeof取其占用的内存大小,是多少呢,是1+4+ ...
- JAVA GUI学习 - JFileChooser文件选择器组件学习:未包括JFileChooser系统类学习
public class JFileChooserKnow { /** * @param args */ public static void main(String[] args) { // TOD ...