`
MoonMonster
  • 浏览: 36594 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java框架集合--常见类的常用方法的常规使用

    博客分类:
  • 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);
}
}
  • 大小: 3.9 KB
4
5
分享到:
评论
5 楼 BS_YG 2015-10-27  
MoonMonster 写道
BS_YG 写道
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈

怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。

QQ

4 楼 MoonMonster 2015-10-27  
BS_YG 写道
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈

怎么格式化代码??我在word中格式好好的,一放到编辑器中格式就乱的一团糟,调整了好几次都没用,最后干脆直接就这样发上来了。
3 楼 BS_YG 2015-10-27  
涛霸可以啊,建议下次尝试下他那个代码编辑器,效果很好,能格式化代码,看了两遍,没发现错,顶下闪人,拷贝些到我博客,哈哈哈哈
2 楼 MoonMonster 2015-10-26  
我果然还是适合一股脑把笔记全扔进 为知笔记,花时间弄这个,最后却真不能看。
1 楼 MoonMonster 2015-10-26  
编辑器真难用。。。

相关推荐

    java集合框架图 (清晰表明集合之间的关系)

    Java 集合框架图解析 Java 集合框架图是一个全新的集合框架,主要由一组用来操作对象的接口组成。...Java 集合框架图是一个全面的集合框架,提供了多种类型的集合接口和实现类,满足不同的应用需求。

    java中关于集合的操作

    在Java编程语言中,集合框架是处理对象组的重要工具,它提供了一种高效、灵活的方式来存储和操作数据。本文将深入探讨Java中的集合操作,并结合PPT(虽然这里没有提供具体的PPT内容,但通常这样的资源会包含示例、...

    commons-Collections最常用类介绍.pdf

    ***mons.collections.collection:提供了一系列实现了java.util.Collection接口的类,这些类扩展了集合框架中集合的常规功能。 ***parators:提供了实现了***parator接口的类,用于定义对象间的排序规则。 ***mons...

    advanced-java-master.zip

    - 集合框架:如ArrayList、LinkedList、HashMap等,是数据存储和处理的关键。 - 异常处理:学习如何正确使用try-catch-finally语句,以及自定义异常。 2. **多线程** - 线程的创建:通过Thread类或实现Runnable...

    Java课程设计--24点卡牌游戏.zip

    随机数生成可以使用`java.util.Random`类来实现,数据结构则可以借助Java集合框架,如ArrayList或LinkedList,来存储和管理卡牌。 接下来是游戏逻辑的实现。这包括对卡牌进行排序、检查合法性(例如,确保每次运算...

    java集合MAP三种遍历

    本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ### 一、Map简介 `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现...

    java_test-////--/16

    标签“JAVA”确认了这个话题与Java编程语言紧密相关,因此我们还可以期待这个项目可能涉及到Java的基础语法、类与对象、异常处理、输入/输出流、集合框架、多线程、IO流(包括文件流和网络流)等核心概念。...

    java经典面试题(典藏版)

    - 了解字符串(String)类的特性,如字符串是不可变的,以及常用方法如concat(), substring()等。 2. **面向对象编程** - 类(class)和对象(object)的概念。 - 封装、继承、多态三大特性。 - 构造函数的使用和this...

    java_poi导入excel通用工具类

    - 如果Excel中有多行数据,可以使用Java集合框架(如 List)来存储这些数据。工具类通常会有一个方法,接受一个 List 对象,然后遍历Excel的每一行,对每行数据调用之前提到的对象赋值逻辑。 5. **指定坐标的赋值*...

    Java面试问题2023集合

    在准备2023年的Java求职面试时,深入理解Java集合框架是至关重要的。这个集合框架是Java编程语言的核心组成部分,它提供了数据结构和算法的基础,使得开发者能够高效地存储、管理和操作对象。以下是一些关于Java集合...

    Java并发编程实践-电子书1-9章pdf

    5. **第五章:原子变量** - 这一章可能深入讲解了Java的Atomic类,如AtomicInteger、AtomicLong等,它们提供了一种无锁编程的方法,可以实现高效且线程安全的更新操作。 6. **第六章:并发集合** - 讲解了...

    DOS命令的使用-常用

    - 大数据是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。 - 大数据通常涉及三个V:Volume(大量)、Velocity(高速)、Variety(多样)。 - **大数据应用场景**: - 搜索引擎优化。...

    Java高效编程指南

    - 避免使用原始类型数组作为类的公开接口,考虑使用集合框架。 2. 构造器与初始化 - 构造器应简洁,避免复杂的逻辑,以减少出错的可能性。 - 使用构造器链,避免重复的初始化代码。 - 枚举类型的单例模式:使用...

    Java实用编程源码50例

    - `ArrayList`、`LinkedList`、`HashSet`、`HashMap`等:学习这些常用集合类的使用方法及其背后的实现原理。 - 遍历与迭代器:掌握集合的遍历方式,理解迭代器的作用。 5. **多线程编程**: - `Thread`类:创建...

    java面试题常规回答

    以上只是面试中可能涉及的部分Java基础知识,对于1-2年的Java开发者来说,还需要掌握集合框架、IO/NIO、设计模式、异常处理、JVM内存模型、Spring框架等更深入的知识。在面试准备过程中,应重点复习这些领域,并通过...

    用于测试使用java.lang.System的代码的JUnit规则集合

    "用于测试使用java.lang.System的代码的JUnit规则集合"是一个专门针对Java内置类`java.lang.System`的扩展,它提供了一套规则和辅助工具,使得测试涉及到系统属性、环境变量或标准输入/输出流的代码变得更加容易和可...

    JAVA常规面试题和答案

    10. **String类的常用方法**: - `indexOf()`: 查找子字符串的索引。 - `charAt()`: 获取指定位置的字符。 - `replace()`: 替换字符串中的部分文本。 - `trim()`: 去除字符串两端的空白字符。 - `split()`: ...

    java开发备忘录

    以下是一些关键的Java开发知识点,基于提供的信息,我们无法获取具体子文件的详细内容,所以将根据Java的常规知识体系进行展开。 1. **Java基础** - **变量与数据类型**:Java支持基本数据类型(如int、char、...

    checking-in-analysis_Java.zip_run

    - 可能使用的数据结构有数组、链表或集合框架中的类,如ArrayList、HashMap等,用于存储和操作考勤信息。 - Java的I/O流用于读写文件,如BufferedReader、FileWriter等,可能结合使用正则表达式进行数据清洗和验证...

    Java集合类中文介绍

    Java集合类是Java编程语言中用于存储和管理对象的关键组件,位于`java.util`包下。集合类框架提供了一系列接口和实现,使开发者能够高效地处理数据。本文将深入介绍这个框架,特别是针对Collection、List、Set以及...

Global site tag (gtag.js) - Google Analytics