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

原创粉丝点击