- 浏览: 36701 次
- 性别:
- 来自: 长沙
最新评论
-
qq_24665727:
厉害!
netty3.0的服务端及客户端的搭建 -
huangshanghua:
有些意思。加油
Java版飞机游戏 -
MoonMonster:
再看,发现中间有段体现自己好无知。
使用一个break跳出多重循环 -
BS_YG:
666,之前上网看socket的代码还奇怪loop是什么意思, ...
使用一个break跳出多重循环 -
BS_YG:
<div class="quote_title ...
Java框架集合--常见类的常用方法的常规使用
Java框架集合--常见类的常用方法的常规使用
1.List
(1)ArrayList 与 Vector
共同点:a.这两个类都实现了List接口,都是有序集合,数据可以重复,可以简单理解为动态数组。
b.初始容量都是10
不同点:a.ArrayList的增长率是1.5,即下一次的容量是当前容量的1.5倍,而Vector是2.
b.从安全性考虑,ArrayList是线程不同步的,而Vector是线程同步的。
在对ArrayList和Vector的增加数据进行时间测试后,如果是在非多线程环境下,最好使用ArrayList,不单节省了时间 ,而且还在数据量非常大时,还能节省大量空间(因为Vector的增量比例是2.0)
常用方法:因为两者大同小异,所以对ArrayList测试就行,而最常见的add(),remove()之类的方法就看API。
a. toArray(); 返回一个按照正确的顺序包含此列表中所有元素的数组。
Object[] a = list.toArray();
因为list.toArray()返回的是一个Object[]数组,所以也需要用Object[]接收
但如果使用list.toArray(T[]),则可以避免这种情况。
Integer[] b = new Integer[list.size()];
list.toArray(b);
b. addAll(T);
按照指定Collection的迭代器所返回的元素顺序,将该Collection中的所有元素追加到此列表的尾部
对于实现了Collection接口的类的对象,都可以add。
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
TreeSet<Integer> set = new TreeSet<Integer>();
Stack<Integer> stack = new Stack<Integer>();
for(int i=0; i<10; i++){
list.add(i);
list2.add(i);
set.add(i);
stack.add(i);
}
System.out.println(list.size()); //输出10
list.addAll(list2);
System.out.println(list.size()); //输出20
list.addAll(set);
System.out.println(list.size()); //输出30
list.addAll(stack);
System.out.println(list.size()); //输出40
c.remove();
remove()方法被重载了,即有remove(int index):移除index处的数据, remove(Object o)移除o这个元素。
如果ArrayList存储的是Integer类型的元素,而且要移除的位置(index)与某个元素(o)相等了怎么处理?? 按API描述,后者是可选的,即如果冲突了,则优先选择前者。
(2)ArrayList 与 LinkedList
既然ArrayList能看成动态数组,那么LinkedList也可以简单理解为链表,那么他们之间的区别就可以很容易看出。
ArrayList是采用数组来保存对象,放在连续的位置中,那么插入,删除操作将会非常耗时;
而LinkedList的对象是放在独立的空间中,空间中同时保存下一个位置的链接,所以查找则会非常耗时,然而插入,删除则更加方便。
//在n个数据中,在第0个位置插入m个数据
ArrayList<Integer> list = new ArrayList<Integer>();
int n = 1000000;
int m = 1000;
for(int i=0; i<n; i++){
list.add(i);
}
long t1 = System.currentTimeMillis();
for(int i=0; i<m; i++){
int num = (int)(Math.random()*list.size());
list.add(0, num);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时: "+(t2-t1));
//最终的测试数据是这个
ArrayList LinkedList
第一次 第二次 第三次 第一次 第二次 第三次
966 978 1334 3 2 2
然而在最开始时,我写的是在随机位置插入随机数,可不管怎么测试,最终都是ArrayList的时间小于LinkedList,后来 才反应过来,每次插入时,LinkedList都要从0开始数,到达指定位置再插入,时间都浪费在了查找上。
对于查找的测试程序最后的测试时间如下(从n个数据中随机查找m个数据):
查找 ArrayList LinkedList
n=1000000 第一次 第二次 第三次 第一次 第二次 第三次
m=1000 1392 1370 1285 3544 3273 3319
可以看出LinkedList的查找时间远远大于ArrayList的查找时间。
LinkedList的方法的使用跟ArrayList相差不大,但多了跟链表特性有关的一些方法,例如: addFirst()...在头部插入元 素,addLast()...在末尾追加元素之类的,但又因为同时实现了List接口与Collection接口的缘故,方法中出现了功能 一样的方法:
例如: getFirst() 和 peek()都是找到第一个元素,poll(),remove()和removeFirst()都是找到并且移除第一个元 素。
(3)Stack Stack 类表示后进先出(LIFO)的对象堆栈。
使用范围很广,例如浏览器的后退按钮。
基本方法(API):
empty()
测试堆栈是否为空。
peek()
查看栈顶对象而不移除它。
pop()
移除栈顶对象并作为此函数的值返回该对象。
push(E item)
把项压入栈顶。
search(Object o)
返回对象在栈中的位置,以 1 为基数。
而关于栈的题目,一般都是此种类型:
一个栈的入栈序列为ABCDE,则不可能的出栈序列为?
1.ECDBA
2.DCEAB
3.DECBA
4.ABCDE
5.EDCBA
2.Set
一个不包含重复元素(重要功能)的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和e2,并且最多 包含一个 null 元素。(API)
实现了Set接口了最常用的两个类是: HashSet和TreeSet.
两者包含的方法差不多,都是add(),contains(),clear(),remove()之类的,需要注意的是iterator()方法的使用。
Iterator不做介绍,只需要知道可以用来取出Set中的值就好:
Iterator<Integer> iter = hash.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
而对于取值则还有另外一种方法:
for(Integer i : hash){
System.out.println(i);
}
TreeSet与HashSet的不同之处在于:此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自 然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。(API)
自然顺序是指(以如下代码为例):
TreeSet<Integer> treeset = new TreeSet<Integer>();
for(int i=0; i<10; i++){
treeset.add((int)(Math.random()*100));
}
for(Integer i : treeset){
System.out.println(i);
}
将输出:7 21 25 30 72 74 86 89 92 93(从小到大)
而String类型将使用自己的默认接口,
treeset.add("abc");
treeset.add("ABC");
treeset.add("HIJ");
treeset.add("xyz");
则输出 ABC HIJ abc xyz。
3.Map
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。(API)
HashMap:K则相当于一个HashSet
TreeSet:K则相当于一个TreeSet
所有的K不能重复,每个K都对应一个value
如果在加入数据的时候,出现相同的key,则替换掉原有的value。
由于Map的特性,可以用于数某篇文章中出现的单词的种类及每种的个数。
举个简单例子(每个字符出现的次数):
String str = "abbcccddddeeeeeffffffggggggg";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (!map.containsKey(ch)) {
map.put(ch, 1);
} else {
int num = map.get(ch);
num++;
map.put(ch, num);
}
}
怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。
QQ
怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。
1.List
(1)ArrayList 与 Vector
共同点:a.这两个类都实现了List接口,都是有序集合,数据可以重复,可以简单理解为动态数组。
b.初始容量都是10
不同点:a.ArrayList的增长率是1.5,即下一次的容量是当前容量的1.5倍,而Vector是2.
b.从安全性考虑,ArrayList是线程不同步的,而Vector是线程同步的。
在对ArrayList和Vector的增加数据进行时间测试后,如果是在非多线程环境下,最好使用ArrayList,不单节省了时间 ,而且还在数据量非常大时,还能节省大量空间(因为Vector的增量比例是2.0)
常用方法:因为两者大同小异,所以对ArrayList测试就行,而最常见的add(),remove()之类的方法就看API。
a. toArray(); 返回一个按照正确的顺序包含此列表中所有元素的数组。
Object[] a = list.toArray();
因为list.toArray()返回的是一个Object[]数组,所以也需要用Object[]接收
但如果使用list.toArray(T[]),则可以避免这种情况。
Integer[] b = new Integer[list.size()];
list.toArray(b);
b. addAll(T);
按照指定Collection的迭代器所返回的元素顺序,将该Collection中的所有元素追加到此列表的尾部
对于实现了Collection接口的类的对象,都可以add。
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
TreeSet<Integer> set = new TreeSet<Integer>();
Stack<Integer> stack = new Stack<Integer>();
for(int i=0; i<10; i++){
list.add(i);
list2.add(i);
set.add(i);
stack.add(i);
}
System.out.println(list.size()); //输出10
list.addAll(list2);
System.out.println(list.size()); //输出20
list.addAll(set);
System.out.println(list.size()); //输出30
list.addAll(stack);
System.out.println(list.size()); //输出40
c.remove();
remove()方法被重载了,即有remove(int index):移除index处的数据, remove(Object o)移除o这个元素。
如果ArrayList存储的是Integer类型的元素,而且要移除的位置(index)与某个元素(o)相等了怎么处理?? 按API描述,后者是可选的,即如果冲突了,则优先选择前者。
(2)ArrayList 与 LinkedList
既然ArrayList能看成动态数组,那么LinkedList也可以简单理解为链表,那么他们之间的区别就可以很容易看出。
ArrayList是采用数组来保存对象,放在连续的位置中,那么插入,删除操作将会非常耗时;
而LinkedList的对象是放在独立的空间中,空间中同时保存下一个位置的链接,所以查找则会非常耗时,然而插入,删除则更加方便。
//在n个数据中,在第0个位置插入m个数据
ArrayList<Integer> list = new ArrayList<Integer>();
int n = 1000000;
int m = 1000;
for(int i=0; i<n; i++){
list.add(i);
}
long t1 = System.currentTimeMillis();
for(int i=0; i<m; i++){
int num = (int)(Math.random()*list.size());
list.add(0, num);
}
long t2 = System.currentTimeMillis();
System.out.println("耗时: "+(t2-t1));
//最终的测试数据是这个
ArrayList LinkedList
第一次 第二次 第三次 第一次 第二次 第三次
966 978 1334 3 2 2
然而在最开始时,我写的是在随机位置插入随机数,可不管怎么测试,最终都是ArrayList的时间小于LinkedList,后来 才反应过来,每次插入时,LinkedList都要从0开始数,到达指定位置再插入,时间都浪费在了查找上。
对于查找的测试程序最后的测试时间如下(从n个数据中随机查找m个数据):
查找 ArrayList LinkedList
n=1000000 第一次 第二次 第三次 第一次 第二次 第三次
m=1000 1392 1370 1285 3544 3273 3319
可以看出LinkedList的查找时间远远大于ArrayList的查找时间。
LinkedList的方法的使用跟ArrayList相差不大,但多了跟链表特性有关的一些方法,例如: addFirst()...在头部插入元 素,addLast()...在末尾追加元素之类的,但又因为同时实现了List接口与Collection接口的缘故,方法中出现了功能 一样的方法:
例如: getFirst() 和 peek()都是找到第一个元素,poll(),remove()和removeFirst()都是找到并且移除第一个元 素。
(3)Stack Stack 类表示后进先出(LIFO)的对象堆栈。
使用范围很广,例如浏览器的后退按钮。
基本方法(API):
empty()
测试堆栈是否为空。
peek()
查看栈顶对象而不移除它。
pop()
移除栈顶对象并作为此函数的值返回该对象。
push(E item)
把项压入栈顶。
search(Object o)
返回对象在栈中的位置,以 1 为基数。
而关于栈的题目,一般都是此种类型:
一个栈的入栈序列为ABCDE,则不可能的出栈序列为?
1.ECDBA
2.DCEAB
3.DECBA
4.ABCDE
5.EDCBA
2.Set
一个不包含重复元素(重要功能)的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和e2,并且最多 包含一个 null 元素。(API)
实现了Set接口了最常用的两个类是: HashSet和TreeSet.
两者包含的方法差不多,都是add(),contains(),clear(),remove()之类的,需要注意的是iterator()方法的使用。
Iterator不做介绍,只需要知道可以用来取出Set中的值就好:
Iterator<Integer> iter = hash.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
而对于取值则还有另外一种方法:
for(Integer i : hash){
System.out.println(i);
}
TreeSet与HashSet的不同之处在于:此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自 然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。(API)
自然顺序是指(以如下代码为例):
TreeSet<Integer> treeset = new TreeSet<Integer>();
for(int i=0; i<10; i++){
treeset.add((int)(Math.random()*100));
}
for(Integer i : treeset){
System.out.println(i);
}
将输出:7 21 25 30 72 74 86 89 92 93(从小到大)
而String类型将使用自己的默认接口,
treeset.add("abc");
treeset.add("ABC");
treeset.add("HIJ");
treeset.add("xyz");
则输出 ABC HIJ abc xyz。
3.Map
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。(API)
HashMap:K则相当于一个HashSet
TreeSet:K则相当于一个TreeSet
所有的K不能重复,每个K都对应一个value
如果在加入数据的时候,出现相同的key,则替换掉原有的value。
由于Map的特性,可以用于数某篇文章中出现的单词的种类及每种的个数。
举个简单例子(每个字符出现的次数):
String str = "abbcccddddeeeeeffffffggggggg";
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (!map.containsKey(ch)) {
map.put(ch, 1);
} else {
int num = map.get(ch);
num++;
map.put(ch, num);
}
}
评论
5 楼
BS_YG
2015-10-27
MoonMonster 写道
BS_YG 写道
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈
怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。
4 楼
MoonMonster
2015-10-27
BS_YG 写道
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈
怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。
3 楼
BS_YG
2015-10-27
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈
2 楼
MoonMonster
2015-10-26
我果然还是适合一股脑把笔记全扔进 为知笔记,花时间弄这个,最后却真不能看。
1 楼
MoonMonster
2015-10-26
编辑器真难用。。。
发表评论
-
jsp---隐式对象简单介绍
2016-03-02 12:25 3626什么是隐式对象? JSP的隐式对象是指在JSP页面系统中 ... -
工厂方法设计模式
2016-02-26 18:24 0一、什么是简单工厂 ... -
netty处理tcp粘包/拆包问题
2016-02-26 17:28 5227所谓的粘包/拆包,用一个例子来说明就是: 加入客户端向服 ... -
netty5服务端与客户端的构建
2016-02-25 19:55 3625简单的介绍一些服务端代码的编写顺序。 1.得到 Serv ... -
Java序列化的几种方式
2016-02-24 21:46 20791.自己定义方法 优点:不同预先设置缓存大小 缺点:不 ... -
Java --- 使用HttpURLConnection连接网络
2016-02-10 19:13 890package com.chalmers.httputils ... -
正则表达式---符号介绍及其简单使用方法
2016-02-07 13:13 714\\ 反斜杠 \t 间隔 ('\u0009') \n 换 ... -
正则表达式---符号介绍及其简单使用方法
2016-02-07 13:09 0\\ 反斜杠 \t 间隔 ('\u0009') \n 换 ... -
BMP24位格式图片读取
2016-01-13 18:01 838存在很大很大的问题, ... -
简单扫雷--完结
2015-12-27 21:50 856不再做了,最后一个版 ... -
简单扫雷--修改
2015-12-26 14:00 13跟上个版本相比较,改 ... -
简单扫雷
2015-12-25 00:50 14花了两个小时的时间,把扫雷的最基本的功能给实现了,虽然本 ... -
Socket_TCP 服务端编写
2015-12-17 22:26 800package com.ct.server; impo ... -
使用一个break跳出多重循环
2015-11-20 09:16 1718大家都知道,java中的bre ... -
Java框架集合--常见类的常用方法的常规使用
2015-10-26 00:14 01.List (1)ArrayList 与 Vector ... -
Java框架集合--常见类的常用方法的常规使用
2015-10-26 00:00 11.List (1)ArrayList 与 Vector ... -
Java框架集合--常见类的常用方法的常规使用
2015-10-25 23:48 01.List (1)ArrayList 与 Vector ... -
Java - - 数组实现栈基本功能
2015-10-24 23:52 1754package com.ct.stack; /** ... -
Java手写动态数组
2015-10-21 23:06 2302package com.ct.array; /** ... -
java语言的final关键字
2015-10-18 09:53 4881. final修饰类,表示该类不可以被继承 2. fin ...
相关推荐
Java 集合框架图解析 Java 集合框架图是一个全新的集合框架,主要由一组用来操作对象的接口组成。...Java 集合框架图是一个全面的集合框架,提供了多种类型的集合接口和实现类,满足不同的应用需求。
在Java编程语言中,集合框架是处理对象组的重要工具,它提供了一种高效、灵活的方式来存储和操作数据。本文将深入探讨Java中的集合操作,并结合PPT(虽然这里没有提供具体的PPT内容,但通常这样的资源会包含示例、...
***mons.collections.collection:提供了一系列实现了java.util.Collection接口的类,这些类扩展了集合框架中集合的常规功能。 ***parators:提供了实现了***parator接口的类,用于定义对象间的排序规则。 ***mons...
- 集合框架:如ArrayList、LinkedList、HashMap等,是数据存储和处理的关键。 - 异常处理:学习如何正确使用try-catch-finally语句,以及自定义异常。 2. **多线程** - 线程的创建:通过Thread类或实现Runnable...
随机数生成可以使用`java.util.Random`类来实现,数据结构则可以借助Java集合框架,如ArrayList或LinkedList,来存储和管理卡牌。 接下来是游戏逻辑的实现。这包括对卡牌进行排序、检查合法性(例如,确保每次运算...
本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ### 一、Map简介 `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现...
标签“JAVA”确认了这个话题与Java编程语言紧密相关,因此我们还可以期待这个项目可能涉及到Java的基础语法、类与对象、异常处理、输入/输出流、集合框架、多线程、IO流(包括文件流和网络流)等核心概念。...
- 了解字符串(String)类的特性,如字符串是不可变的,以及常用方法如concat(), substring()等。 2. **面向对象编程** - 类(class)和对象(object)的概念。 - 封装、继承、多态三大特性。 - 构造函数的使用和this...
- 如果Excel中有多行数据,可以使用Java集合框架(如 List)来存储这些数据。工具类通常会有一个方法,接受一个 List 对象,然后遍历Excel的每一行,对每行数据调用之前提到的对象赋值逻辑。 5. **指定坐标的赋值*...
在准备2023年的Java求职面试时,深入理解Java集合框架是至关重要的。这个集合框架是Java编程语言的核心组成部分,它提供了数据结构和算法的基础,使得开发者能够高效地存储、管理和操作对象。以下是一些关于Java集合...
5. **第五章:原子变量** - 这一章可能深入讲解了Java的Atomic类,如AtomicInteger、AtomicLong等,它们提供了一种无锁编程的方法,可以实现高效且线程安全的更新操作。 6. **第六章:并发集合** - 讲解了...
- 大数据是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。 - 大数据通常涉及三个V:Volume(大量)、Velocity(高速)、Variety(多样)。 - **大数据应用场景**: - 搜索引擎优化。...
- 避免使用原始类型数组作为类的公开接口,考虑使用集合框架。 2. 构造器与初始化 - 构造器应简洁,避免复杂的逻辑,以减少出错的可能性。 - 使用构造器链,避免重复的初始化代码。 - 枚举类型的单例模式:使用...
- `ArrayList`、`LinkedList`、`HashSet`、`HashMap`等:学习这些常用集合类的使用方法及其背后的实现原理。 - 遍历与迭代器:掌握集合的遍历方式,理解迭代器的作用。 5. **多线程编程**: - `Thread`类:创建...
以上只是面试中可能涉及的部分Java基础知识,对于1-2年的Java开发者来说,还需要掌握集合框架、IO/NIO、设计模式、异常处理、JVM内存模型、Spring框架等更深入的知识。在面试准备过程中,应重点复习这些领域,并通过...
"用于测试使用java.lang.System的代码的JUnit规则集合"是一个专门针对Java内置类`java.lang.System`的扩展,它提供了一套规则和辅助工具,使得测试涉及到系统属性、环境变量或标准输入/输出流的代码变得更加容易和可...
10. **String类的常用方法**: - `indexOf()`: 查找子字符串的索引。 - `charAt()`: 获取指定位置的字符。 - `replace()`: 替换字符串中的部分文本。 - `trim()`: 去除字符串两端的空白字符。 - `split()`: ...
以下是一些关键的Java开发知识点,基于提供的信息,我们无法获取具体子文件的详细内容,所以将根据Java的常规知识体系进行展开。 1. **Java基础** - **变量与数据类型**:Java支持基本数据类型(如int、char、...
- 可能使用的数据结构有数组、链表或集合框架中的类,如ArrayList、HashMap等,用于存储和操作考勤信息。 - Java的I/O流用于读写文件,如BufferedReader、FileWriter等,可能结合使用正则表达式进行数据清洗和验证...
Java集合类是Java编程语言中用于存储和管理对象的关键组件,位于`java.util`包下。集合类框架提供了一系列接口和实现,使开发者能够高效地处理数据。本文将深入介绍这个框架,特别是针对Collection、List、Set以及...