- 浏览: 37041 次
- 性别:
- 来自: 长沙
-
最新评论
-
qq_24665727:
厉害!
netty3.0的服务端及客户端的搭建 -
huangshanghua:
有些意思。加油
Java版飞机游戏 -
MoonMonster:
再看,发现中间有段体现自己好无知。
使用一个break跳出多重循环 -
BS_YG:
666,之前上网看socket的代码还奇怪loop是什么意思, ...
使用一个break跳出多重循环 -
BS_YG:
MoonMonster 写道BS_YG 写道涛霸可以啊,建议下 ...
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 3639什么是隐式对象? JSP的隐式对象是指在JSP页面系统中 ... -
工厂方法设计模式
2016-02-26 18:24 0一、什么是简单工厂 ... -
netty处理tcp粘包/拆包问题
2016-02-26 17:28 5242所谓的粘包/拆包,用一个例子来说明就是: 加入客户端向服 ... -
netty5服务端与客户端的构建
2016-02-25 19:55 3633简单的介绍一些服务端代码的编写顺序。 1.得到 Serv ... -
Java序列化的几种方式
2016-02-24 21:46 20931.自己定义方法 优点:不同预先设置缓存大小 缺点:不 ... -
Java --- 使用HttpURLConnection连接网络
2016-02-10 19:13 901package com.chalmers.httputils ... -
正则表达式---符号介绍及其简单使用方法
2016-02-07 13:13 727\\ 反斜杠 \t 间隔 ('\u0009') \n 换 ... -
正则表达式---符号介绍及其简单使用方法
2016-02-07 13:09 0\\ 反斜杠 \t 间隔 ('\u0009') \n 换 ... -
BMP24位格式图片读取
2016-01-13 18:01 865存在很大很大的问题, ... -
简单扫雷--完结
2015-12-27 21:50 869不再做了,最后一个版 ... -
简单扫雷--修改
2015-12-26 14:00 13跟上个版本相比较,改 ... -
简单扫雷
2015-12-25 00:50 14花了两个小时的时间,把扫雷的最基本的功能给实现了,虽然本 ... -
Socket_TCP 服务端编写
2015-12-17 22:26 810package com.ct.server; impo ... -
使用一个break跳出多重循环
2015-11-20 09:16 1737大家都知道,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 1765package com.ct.stack; /** ... -
Java手写动态数组
2015-10-21 23:06 2313package com.ct.array; /** ... -
java语言的final关键字
2015-10-18 09:53 5191. final修饰类,表示该类不可以被继承 2. fin ...
相关推荐
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
《基于YOLOv8的智慧社区独居老人生命体征监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
Android Studio Meerkat 2024.3.1 Patch 1(android-studio-2024.3.1.14-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/90557060 part2: https://download.csdn.net/download/weixin_43800734/90557056
侧轴承杯加工工艺编制及夹具设计.zip
NASA数据集锂电池容量特征提取(Matlab完整源码和数据) 作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。
板料折弯机液压系统设计.zip
C6150车床的设计.zip
机器学习之KNN实现手写数字
python爬虫;智能切换策略,反爬检测机制
mpls-vpn-optionA-all
56tgyhujikolp[
GB 6442-86企业职工伤亡事故调查分析规则.pdf
汽车液压式主动悬架系统的设计().zip
2000-2024年各省专利侵权案件结案数数据 1、时间:2000-2024年 2、来源:国家知识产权J 3、指标:专利侵权案件结案数 4、范围:31省 5、用途:可用于衡量知识产权保护水平
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
内容概要:本文档详细复现了金融数学课程作业,涵盖欧式看涨期权定价和投资组合优化两大部分。对于欧式看涨期权定价,分别采用Black-Scholes模型和蒙特卡洛方法进行了计算,并对彩虹期权进行了基于最大值的看涨期权定价。投资组合优化部分则探讨了最小方差组合、给定收益的最小方差组合、最大效用组合以及给定风险的最大收益组合四种情形,还对比了拉格朗日乘数法和二次规划求解器两种方法。文中不仅提供了详细的MATLAB代码,还有详尽的中文解释,确保每一步骤清晰明了。 适合人群:金融工程专业学生、量化分析师、金融数学爱好者。 使用场景及目标:①帮助学生理解和掌握金融衍生品定价的基本原理和方法;②为从事量化分析的专业人士提供实用工具和技术支持;③作为教学材料辅助高校教师讲授相关内容。 其他说明:文档还包括了完整的论文结构建议,从封面页到结论,再到附录,涵盖了所有必要元素,确保提交的作业符合学术规范。此外,还特别强调了数据预处理步骤,确保代码可以顺利运行。
脉冲电解射流加工喷射装置设计(1)
ThinkPad S1 (2nd Generation) 和ThinkPad Yoga 260 用户指南V3.0,包含如何拆机更换硬件
charles描述文件下载
python代码-使用人类对话数据集lora微调deepseek