Java集合
来源:互联网 发布:vmware上安装mac os 编辑:程序博客网 时间:2024/06/03 19:06
Set(集):集合中的对象不按特定方式排序,并且集合中的元素没有重复。
List(集):集合中的对象按照索引位置排序,可以有重复对象。
Map(集):集合中的每一个元素包括一对键对象和值对象,没有重复的键对象,值对象可以重复。
1、Collection和Iterator接口
Collection中声明了适用于Java集合(Set,List)的通用方法
Iterator接口隐藏底层的数据结构,向客户程序提供了遍历各种类型的集合的同一接口。Iterator接口中声明了如下方法:
●hasNext():判断集合中的元素是否遍历完毕,如果没有就返回true
●next():返回下一个元素
●remove():从集合中删除上一个由next()方法返回的元素
package collectiontest;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;public class Visitor { public static void print(Collection c) { Iterator it = c.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // Iterator<? extends Object> it = c.iterator(); // while (it.hasNext()) { // Object element = it.next(); // System.out.println(element); // } } public static void main(String[] args) { // set集合 Set<String> set = new HashSet<String>(); set.add("Tom"); set.add("Marry"); set.add("Jack"); print(set); // list集合 List<String> list = new ArrayList<String>(); list.add("Linda"); list.add("Marry"); list.add("Rose"); print(list); // map集合 Map<String, String> map = new HashMap<String, String>(); map.put("M", "男"); map.put("W", "女"); print(map.entrySet()); }}
输出结果:
Tom
Jack
Marry
Linda
Marry
Rose
W=女
M=男
2、Set集
Set接口主要有两个实现类:HashSet和TreeSet,HashSet有一个子类LinkedHashSet,TreeSet类实现了SortedSet接口
2.1、HashSet类
HashSet类按照哈希算法来存取集合中的对象,具有很好的存取和查找功能,当向集合中添加一个对象时,HashSet会调用对象的hashCode()方法来获取哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。
2.2、TreeSet类
TreeSet实现了SortedSet接口,能够对集合中的对象进行排序,TreeSet支持两种排序方式:自然排序和客户化排序。在默认情况下使用自然排序。
在JDK类库中,有一部分类实现了Comparable接口,如Integer、Double和String等。Comparable有一个方法compareTo(),它返回整数类型。
TreeSet调用对象的compareTo()方法比较集合中对象的大小,然后进行升序排列,这种排序叫做自然排序。
使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类型必须实现了Comparable接口。
3、List列表
List接口主要的实现类包括:
ArrayList:代表长度可变的数组,允许对元素进行快速的随机访问,但是向ArrayList中插入和删除元素的速度较慢。
LinkedList:在实现中采用链表数据结构。对顺序访问进行了优化,向List中插入和删除元素的速度较快,随机访问速度相对较慢。
3.1、ListIterator接口
List的ListIterator接口返回一个ListIterator对象,ListIterator接口继承了Iterator接口,此外还提供了专门操纵列表的方法:
●add():向列表中插入一个元素
●hasNext():判断列表中是否还有下一个元素
●hasPrevious:判断列表中是否还有上一个元素
●next():返回列表中的下一个元素
●previous():返回列表中的上一个元素
package listinserttest;import java.util.Arrays;import java.util.Collections;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;public class ListInserter { public static void insert(List<Integer> ls, int data) { ListIterator<Integer> it = ls.listIterator(); while (it.hasNext()) { Integer in = it.next(); if (data <= in.intValue()) { it.previous(); ls.add(new Integer(data)); break; } } } public static void main(String[] args) { // TODO 自动生成的方法存根 List<Integer> list = new LinkedList<Integer>(); list.add(5); list.add(3); list.add(6); list.add(9); Collections.sort(list); insert(list, 8); System.out.println(Arrays.toString(list.toArray())); }}
输出:[3, 5, 6, 9, 8]
4、比较Java数组和各种List的性能
对Java数组进行随机访问和迭代操作具有最快的速度;对LinkedList进行插入和删除操作具有最快的速度;对ArrayList进行随机访问也具有较快的速度;Vector类在各方面都没有突出的性能,属于历史集合类,已经不提倡使用。
5、历史集合类
Properties
package propertiestest;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.Properties;import java.util.Set;public class PropertiesTester { public static void print(Properties ps) { Set<Object> set = ps.keySet(); Iterator<Object> it = set.iterator(); while (it.hasNext()) { String key = (String) it.next(); String value = ps.getProperty(key); System.out.println(key + " " + value); } } public static void main(String[] args) throws IOException { Properties ps = new Properties(); InputStream input = PropertiesTester.class .getResourceAsStream("myapp.properties"); // 把输入流中的数据加载到Properties对象中 ps.load(input); print(ps); // 返回一个Properties对象,这个对象中包含一系列系统属性 ps = System.getProperties(); print(ps); }}
输出结果:
user Tom
shape circle
color red
java.runtime.name Java(TM) SE Runtime Environment
sun.boot.library.path C:\Program Files (x86)\Java\jre1.8.0_131\bin
java.vm.version 25.131-b11
java.vm.vendor Oracle Corporation
java.vendor.url http://java.oracle.com/
path.separator ;
java.vm.name Java HotSpot(TM) Client VM
file.encoding.pkg sun.io
user.country CN
user.script
sun.java.launcher SUN_STANDARD
sun.os.patch.level Service Pack 1
java.vm.specification.name Java Virtual Machine Specification
user.dir E:\jpp\workspace\DallApp
java.runtime.version 1.8.0_131-b11
java.awt.graphicsenv sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs C:\Program Files (x86)\Java\jre1.8.0_131\lib\endorsed
os.arch x86
java.io.tmpdir C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator
java.vm.specification.vendor Oracle Corporation
user.variant
os.name Windows 7
sun.jnu.encoding GBK
java.library.path C:\Program Files (x86)\Java\jre1.8.0_131\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre1.8.0_131/bin/client;C:/Program Files (x86)/Java/jre1.8.0_131/bin;C:/Program Files (x86)/Java/jre1.8.0_131/lib/i386;C:\ProgramData\Oracle\Java\javapath;E:\app\Administrator\product\11.2.0\dbhome_2\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\IDM Computer Solutions\UltraCompare;E:\toolsroot\python3\Scripts\;E:\toolsroot\python3\;C:\Users\Administrator\AppData\Local\Programs\Python\Launcher\;C:\Java1\jdk1.7.0\bin;C:\Java1\jdk1.7.0\jre\bin;E:\toolsroot\Bandizip;E:\toolsroot\OpenVPN\bin;E:\toolsroot\android-sdk-windows\platform-tools;c:\program files\esafenet\cobra docguard client;E:\yonyou\UAP-STUDIO-6.5.0.2\UAP-STUDIO-6.5.0.2\Platform;;.
java.specification.name Java Platform API Specification
java.class.version 52.0
sun.management.compiler HotSpot Client Compiler
os.version 6.1
user.home C:\Users\Administrator
user.timezone
java.awt.printerjob sun.awt.windows.WPrinterJob
file.encoding GBK
java.specification.version 1.8
java.class.path E:\jpp\workspace\DallApp\bin
user.name Administrator
java.vm.specification.version 1.8
sun.java.command propertiestest.PropertiesTester
java.home C:\Program Files (x86)\Java\jre1.8.0_131
sun.arch.data.model 32
user.language zh
java.specification.vendor Oracle Corporation
awt.toolkit sun.awt.windows.WToolkit
java.vm.info mixed mode
java.version 1.8.0_131
java.ext.dirs C:\Program Files (x86)\Java\jre1.8.0_131\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path C:\Program Files (x86)\Java\jre1.8.0_131\lib\resources.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\rt.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\sunrsasign.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\jsse.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\jce.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\charsets.jar;C:\Program Files (x86)\Java\jre1.8.0_131\lib\jfr.jar;C:\Program Files (x86)\Java\jre1.8.0_131\classes
java.vendor Oracle Corporation
file.separator \
java.vendor.url.bug http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding UnicodeLittle
sun.cpu.endian little
sun.desktop windows
sun.cpu.isalist pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
BitSet表示一组boolean类型数据的集合,集合中的每个元素都是boolean类型的,默认为false
package BitTest;import java.util.BitSet;public class BitSetTester { static final int BYTE = 8; static final int SHORT = 16; static final int INT = 32; static final int LONG = 64; public static BitSet toBitSet(long data, int size) { BitSet bitset = new BitSet(); for (int i = size - 1; i >= 0; i--) { if ((((long) 1 << i) & data) != 0) { bitset.set(i); } else { bitset.clear(i); } } return bitset; } public static BitSet byteToBitset(byte data) { return toBitSet(data, BYTE); } public static BitSet shortToBitset(short data) { return toBitSet(data, SHORT); } public static BitSet intToBitset(int data) { return toBitSet(data, INT); } public static BitSet longToBitset(long data) { return toBitSet(data, LONG); } public static void printBitSet(BitSet bt, int size) { String bits = new String(); for (int i = 0; i < size; i++) { bits = (bt.get(i) ? 1 : 0) + bits; if ((i + 1) % 8 == 0) bits = " " + bits; } System.out.println("bits:" + bits); } public static void printBitSet(BitSet bt) { printBitSet(bt, bt.size()); } public static void main(String[] args) { byte a = -125; short b = -125; int c = -125; long d = -125; printBitSet(byteToBitset(a), BYTE); printBitSet(shortToBitset(b), SHORT); printBitSet(intToBitset(c), INT); printBitSet(longToBitset(d), LONG); byte e = 125; short f = 125; int g = 125; long h = 125; printBitSet(byteToBitset(e)); printBitSet(shortToBitset(f)); printBitSet(intToBitset(g)); printBitSet(longToBitset(h)); }}
输出结果:
bits: 10000011
bits: 11111111 10000011
bits: 11111111 11111111 11111111 10000011
bits: 11111111 11111111 11111111 11111111 11111111 11111111 11111111 10000011
bits: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111101
bits: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111101
bits: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111101
bits: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 01111101
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- JQuery 渐变显示隐藏动画 ( fadeIn(),fadeOut(),fadeTo() )
- Retrofit原理探究[源码解析]
- OSSIM5.0仪表盘显示
- 【VBA研究】关闭或保存文件时的提示信息
- http协议头信息概述
- Java集合
- android中自定义属性TypedArray的用法
- 一行注解处理Android23+权限 AbcPermission 重要更新
- typedef用法总结
- Nginx + CGI/FastCGI + C/Cpp
- 关于导出pdf的注意点
- Java生成带注释properties属性文件
- 如何往适配器里添加数据
- 基于SPRING CLOUD开发的基础环境搭建