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

    集合

     8.3.Set集合

    8.3.1HashSet

    无序,不重复,存取查找性能好,非线程同步,集合元素可以是null,判断相同元素的标准是hashcode()方法返回值相等且equals()返回值也相等。Hashcode不同,equals相同,会存在不同位置。hashcode()方法计算存储位置,快速存取;比数组,长度可变,内存可不连续。改变元素的值容易引起混乱。Add,remove;相同元素多次插入HashSet时,会以链表的形式存储在相同位置,称为hash桶,会影响性能。

    8.3.2LinkedHashSet

    根据插入顺序排序,不重复,以链表维护元素的次序,先插入在前。性能低于hashset。

    8.3.3TreeSet

    有序,不重复,排序通过CompareTo(Object  obj)方法,CompareTo相同的无法添加。定义类需要实现Comparable接口。保存相同类型的对象。存储规则:equals和CompareTo返回结果同步。修改元素会引起混乱。last(),first(),lower()等。自然排序按升序排列,定制排序在构造函数中传入Comaprator接口lambda表达式。

    TreeSet是有序,通过插入对象的CompareTo方法比较,返回为0表示相同,则无法在添加,自定义类需要实现该方法。TreeSet中应该添加同一个类的对象。

    Equals和CompareTo返回的结果要一致,否则会出错。

    修改TreeSet里的实例变量会导致不在有序,且可能出现重复值,删除重复的对象会失败,可以删除没有没修改过或不与修改过的对象相同的对象。所以尽量不要修改TreeSet和hassSet的对象。

    自然排序:TreeSet自动调用集合元素的CompareTo方法来比较元素之间的大小关系,进行升序排列。

    定制排序,创建TreeSet对象时,以lambda表达式传入函数式接口Comparator,实现compare函数,用于比较。还是根据返回值判断大小。对象自身的CompareTo接口就不用了。

    专为枚举类设计的集合类,有序,按枚举类中定义的顺序排序,存储紧凑高效。

    8.3.4EnumSet

    有序,以枚举值在枚举类中的定义顺序为顺序,不可插入null;

           Set都是线程不安全的,hashset性能高于treeset,要求有序时才使用treeset。迭代访问时linkedhashset性能高于hashset;

    8.4List集合

    8.4.1List接口和ListIterator接口

    List是按索引插入值,0开始,可重复,通过对象equals函数判断是否相等。

    indexOf(Objrct o);查找object对象第一次出现的索引

    sort(Comparator c)根据参数对list排序。

    Set只提供iterator()方法,List还有额外的listIterator()方法,返回listIterator对象,有hasPrevious()  previous(),add()三个方法。

    ListIterator可以通过hasNext正向遍历list,可以通过hasPrevious反向遍历list。

    8.4.2ArrayListVector实现类

    Arraylist和Vector默认大小为10 ,可以用initialCapacity(int)或ensureCapacity(int)方法来设置初始大小,通过trimToSize()将大小设置为容量大小,减少空间占用。

           Vector的子类Stack(栈),后进先出,性能差。

           ArrayList是线程不安全的,而Vector是线程安全的。

           Arrays中有一个aslist(object… a)将一个数组或者指定个数的对象转换成list集合,格式固定,不可增加或删除。

    List实例

    import java.util.*;

    public class  helloworld

    {

           public static void main(String[] args)

           {

                  List booklist=new ArrayList();

                  booklist.add(new String("疯狂java讲义1"));

                  booklist.add(new String("疯狂java讲义2"));

                  booklist.add(new String("疯狂java讲义3"));

                  ListIterator lit=booklist.listIterator();

                  while(lit.hasNext())

                  {

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

                         lit.add(new String("-----------分隔符----------"));

                  }

                  System.out.println("开始反向");

                  while(lit.hasPrevious())

                  {

                         System.out.println(lit.previous());

                  }           

           }

    }

    8.5Queue集合

    Queue队列,先进先出,插入队尾,对头取出。

    8.5.1PriorityQueue实现类

    PriorityQueue实现类,并不是先进先出,而是进行排序,小的在头,大的在尾,不能是null,需要相同对象。排序分自然排序很定制排序,定制排序需在构造器中传入实现Comparable接口。

    8.5.2deque接口和arraydeque实现类

    Deque是一个双端队列,两头操作。XXXFirst()   XXXLast()操作函数。

    ArrayDeque是接口Deque的实现类,

    8.5.3 Linkedlist实现类

    可以当做list、stack和deque来使用,内部采用链表实现,随机访问性能较差,插入删除性能较好。

    遍历集合元素,ArrayList和Vector采用get方法,linkedlist采用itertor。

    8.6 Map集合

     

    Hashmap

    线程不安全能使用null作为key或者value;hashtable线程安全,不能使用null作为key或者value,equals判断键值是否相等。 如果采用可变对象作为hashmap的键值,程序修改了对象,导致map无法正常访问修改的键值。

    Linkedhashmap

    按插入顺序保存键值对。

    TreeMap

    有序,是红黑树结构,每个节点是一个key-value对,根据key值进行排序,有自然排序和定制排序。

    Properties

    方便的操作属性文件,,文件内容格式属性名=属性值,load加载,store保存,setProperty()设置,getProperty()获取值。

    WeakHashMap

    保留对对象的弱引用,一旦系统垃圾回收后,则map里的对象会被删除,wmap.Put(“java”,“new String(中等));java是直接量是强引用,不会删除。wmap.Put(new Stirng(“C++”),“new String(中等));C++为弱引用,回收会被删除。

    IdentyHashMap

    与hashmap类似,只是采用==来判断key值是否相等。而不是equels和CompareTo对比。允许使用null作为key和value。

    EnumMap

    创建时必须指定枚举类,将枚举值与对应的关联值对应起来,以枚举值作为key值,根据枚举值的顺序排列,不允许null作为key值,可以作为value值。

    8.8操作结合的工具类Collection

    8.8.1集合的操作

    void reverse(List list),反序

    void shuffle(List list),随机排序,打乱排序

    void sort(List list)自然顺序排序

    void swap(List list,int i,int j)调换list中的两个恶元素

    void rotate(List list,int distence)根据distence的值将list中的元素循环移位。

    Int binarySearch(List list , Object key)list必须有序,快速查找键值的索引。

    Int frequency(collection c,Object o)查找集合中出现的次数。

    Boolean replaceAll(List list, Object oldVal,Object newVal)新值代替所有旧值。

    8.8.2集合同步封装Collection.synchronizedXxx

    List list=Collection.synchronizedList(new ArrayList());

    8.8.3集合的只读设置

    通过Collection的emptyXxx()方法创建空的只读集合,使用singletonXxx()创建只含有一个对象的只读集合,通过unmodifiableXxx()创建只读集合。

    自己编了一个股票监控软件,有如下功能,有兴趣的朋友可以下载;

    (1)   个股监测。监测个股实时变化,可以监测个股大单交易、急速拉升和下降、主力入场和出场、股票最高点和最低点提醒。检测到最高点、最低点、主力进场点、主力退场点、急速拉升点、急速下跌点,给出语音或者声音提醒,不用再时刻看着大盘了,给你更多自由的时间;

    (2)   大盘监测。监测大盘的走势,采用上证、深证、创业三大指数的综合指数作为大盘走势。并实时监测大盘的最高点和最低点、中间的转折点。

    (3)   股票推荐。还能根据历史数据长期或短期走势进行分析,对股市3千多个股票进行分析对比,选出涨势良好的股票,按照增长速度从大到小排序,推荐给你涨势良好的股票;

    下载地址:

    1.0.3版本(修复大盘指数崩溃缺陷)下载地址:

    链接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取码:003h

    更新链接:

    https://www.cnblogs.com/bclshuai/p/10621613.html

  • 相关阅读:
    Dora.Interception,为.NET Core度身打造的AOP框架 [3]:多样化拦截器应用方式
    Dora.Interception,为.NET Core度身打造的AOP框架 [2]:以约定的方式定义拦截器
    Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
    TechEmpower最新一轮的性能测试出炉,ASP.NET Core依旧表现不俗
    [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]
    依赖注入[8]: .NET Core DI框架[服务消费]
    依赖注入[7]: .NET Core DI框架[服务注册]
    依赖注入[6]: .NET Core DI框架[编程体验]
    依赖注入[5]: 创建一个简易版的DI框架[下篇]
    依赖注入[4]: 创建一个简易版的DI框架[上篇]
  • 原文地址:https://www.cnblogs.com/bclshuai/p/10339197.html
Copyright © 2011-2022 走看看