zoukankan      html  css  js  c++  java
  • java 集合

    一、Java集合概述,关系如下图1-1所示

     

    图 1-1

    二、collection集合

    主要方法:集合中的很多方法都需要重写集合中对象的equals方法才能实现,例如移除某个元素,需要通过equals方法进行比较是不是这个元素或者这个集合中是否包含这个元素

    1、Add(Object o):添加个对象带集合里

    2、AddAll(Collection coll):添加一个集合到集合里

    3、Clear():清空集合

    4、RemoveObject o):移除集合里的一个对象

    5、removeAll(Collection coll):移除集合里的一组元素

    6、ramainAll(Collection coll):保留coll中非元素,其余均移除

    遍历:Collection无法获取指定元素,但是可以进行遍历,遍历有两种方法

    1、可以通过增强的for循环遍历

    2、也可以通过Iterator来遍历,需要通过collectionIterator()先获取这个接口的对象,然后通过判断HasNext()Next()方法来通过while方法来依次获取collection集合中的元素

    工具方法:

    1、isEmpty()

    2、contaionsAll(Collection coll)

    3、toArray()

    4、toArray(T [] a)

    三、Set

    hashSet

     1HashSetset的最典型实现

     2HashSet中不能有重复的元素,判定两个元素是否重复的标准是:equals()方法返回ture

     3、无序:HashSet是根据hashCode()来存放值,所以不能保证顺序

     4、如果两个对象的equals方法返回时ture那么两个对象一定相等

      5HashSet是线程不安全的

     

    linkedHashSet

     1、是HashSet的子类

     2、根据元素的Hashcode的值决定元素存储的位置,但同时也用链表来维护顺序

     3、插入效率略低于HashSet,但是迭代查询时有很好的性能

     4、不允许插入重复的元素

     

    四、TreeSet

    1、默认排序

    //创建SET

    TreeSet ts = new TreeSet();

    //输入学生信息

    Scanner scan = new Scanner(System.in);

    for(int i=0;i<5;i++){

    System.out.println("student ["+(i+1)+"]name:");

    String stuName = scan.next();

    System.out.println("student ["+(i+1)+"]score:");

    int stuScore = scan.nextInt();

    ts.add(new Student(stuName, stuScore));

    }

    //遍历打印学生信息

    Iterator it = ts.iterator();

    while(it.hasNext()){

    System.out.println(it.next());

    }

    注意事项:student 类需要实现Comparable接口 需要重写compareTo(Object o)方法

     

    2、定制排序

    //创建Comparator 接口的对象,并利用匿名内部类对里面的方法进行重写

    Comparator comparator = new Comparator() {

    @Override

    public int compare(Object o1, Object o2) {

    if(o1 instanceof Student1 && o2 instanceof Student1){

    Student1 s1 = (Student1) o1;

    Student1 s2 = (Student1) o2;

    return s1.getScore()-s2.getScore();

    throw new ClassCastException("类型转换异常");

    }

    };

    //定义TreeSet,传入compare对象

    TreeSet ts = new TreeSet(comparator);

    //输入学生信息

    //遍历学生信息

    注意:这种方法则Student1中不用重写任何方法,直接只有对象,构造方法,和get set方法就可以了

     

    五、List

    1List允许放重复的数组,可以看成是可以变长的数组,对应数组的下标中存放的各个元素在内存中的地址,如图1-2所示

     

    图 1-2

     

    2、ArrayList vector   前者是线程不安全的,后者是线程安全的,但是还是建议用Arrylist,因为vector实在是太古老的(在jdk1.0时的)

    3、Arrays.asList(Object ... args)返回的是一个list的对象,不是arraylist也不是vector;这是一个不定长参数的方法;返回的list是一个只读list

     

    4、什么是不定长参数的方法:

    jdk1.5后允许有;

    用三个...放在形参类型和形参名字之间;

    不定长形参只能在函数的最后一个参数的位置上;

    调用包含一个可变形参的方法时,可以为该形参传入多个参数或者一个数组,不传入任何参数也可以;

    能匹配定长的方法,那么优先匹配定长的方法,含有不定参数的重载方法最后匹配; Main方法的参数是一个数组类型,也可以改成一个可变参数类型;

    调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数

     

    六、

    Map

    1Map 用于保存具有映射关系的数据,即保存键值对的集合,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value

    2Map 中的 key value 都可以是任何引用类型的数据 Map 中的 Key 不允许重复,即同一个 Map

    3、对象的任何两个 Key 通过 equals 方法比较中返回 false

    4Key Value 之间存在单向一对一关系,即通过指定的Key 总能找到唯一的,确定的 Value

    5、常用方法:

    //boolean containsKey(Object key)

    //boolean containsValue(Object value)

    //Set KeySet():返回key对应的集合,Set类型

    Collection keys = map.keySet();

    System.out.println(keys.toString());

     

    //Collection<?> values():返回value对应的集合

    Collection values = map.values();

    System.out.println(values.toString());

    HashMapHashTablemap接口的两个典型的实现类,存在一些区别:

    HashTable很古老,不建议使用

    HashTable是线程安全的,HashMap是线程不安全的

    HashTable不允许使用null来做keyvalue,HashMap允许

    HashSetHashMap

    1)HashSet中维护了一个HashMap的属性

    2)在操作HashSet的方法时实际上是操作的HashMap的方法(包括add或者contain的方法等)

      linkedHashMaplinkedHashSet几乎一样;linkedTreeMaplinkedTreeSet几乎一样;

    Propreties

     1Properties对应.properties属性文件

     2properties属性文件对应的是键值对,键值对的类型对应的都是

    @Test

    public void testProperties() throws IOException {

    //src下创建file文件,命名为jdbc.properties

    //读取jdbc.properties

    //1、创建properties对象

    Properties p = new Properties();

    //2、调用properties的load()方法加载属性文件的输入流

    InputStream intstr = TestProperties.class.getClassLoader().getResourceAsStream("jdbc.properties");

    p.load(intstr);

    //3、调用getProperty(String key)的方法获取属性值

    String user = p.getProperty("user");

    System.out.println(user);

    }

    五、Collections

    Collections是一个操作Set  Map  List 等集合的工具类,主要有以下几个作用:

    1、获取线程安全的集合对象

    /**

     * ArrayList HashSet HashMap  都是线程不安全的

     * 如何获得一个线程安全的对象?

     * 调用Collections对象的synchronizedXxx()方法获取线程安全的集合

     */

    List list = new ArrayList();

    List list2 = Collections.synchronizedList(list);

    2、排序

    Collections.sort(list3, new Comparator() {

    @Override

    public int compare(Object o1, Object o2) {

    }

    });

     

    3、获取集合中最小的元素(要求集合中的都实现comparable接口)

     

    六、Enumeration(StringTokenizer是Enumeration的子类)

    Enumeration enumeration = new StringTokenizer("a,b,c,d,e");

    while(enumeration.hasMoreElements()){

    System.out.println(enumeration.nextElement());

    }

    还可以通过HashTable来获取Enumeration 如下:

    Hashtable hashtable = new Hashtable();

    hashtable.put("A", 1);

    hashtable.put("B", 2);

    hashtable.put("C", 3);

    Enumeration enumeration = hashtable.elements();

     

     

  • 相关阅读:
    C#多线程参数传递
    Delphi单元测试工具Dunit介绍
    使用javascript生成文件
    Windows自动登录源码
    [Win32]一个调试器的实现
    用MASM写一个简单的实现递归操作的汇编程序,所谓递归,上课已经跟大家说清楚了,如果我们只考虑简单的只分一次的递
    C#多线程编程(4)多线程与UI操作
    在Delphi中实现类型安全的容器,Delphi泛型库DGL引介(提供源码下载) .
    delphi 中几种多线程操作方式
    C#实现WEB服务器
  • 原文地址:https://www.cnblogs.com/latter/p/6417815.html
Copyright © 2011-2022 走看看