• java中的数据结构


    1.链表的使用

    使用时需要import java.util.List 和 java.util.ArrayList

       //返回list中的元素个数
        int size();        
      
        //判断list中是否包含元素,如果不包含返回true
        boolean isEmpty();        
        
        //判断list中是否包含某个特定的对象
        boolean contains(Object o);    
        
        //以正确的顺序返回list中元素的迭代器    
        Iterator<E> iterator();
        
        //返回一个包含list中所有元素的数组,数组中元素的顺序和list中的顺序一样
        //这个方法可以当做array-based 和 collection-based API之间的桥梁
        Object[] toArray();        
        
        //返回一个包含list中所有元素的数组,数组中元素的顺序和list中的顺序一样
        //array数组的类型是确定的。如果指定的array大小不足,这个方法将会生成一个新的数组用于返回
        //新数组的类型和运行时的数组类型一样
        <T> T[] toArray(T[] a);
        
        //在list的末尾插入元素(实现类可以选择插入的位置)
        boolean add(E e);
        
        //如果指定元素存在list中,移除list中第一次出现的指定元素(实现类可以选择具体的实现)
        boolean remove(Object o);
        
        //判断list中是否包含某个集合
        boolean containsAll(Collection<?> c);
        
        //将指定集合中的所有元素加到list的末尾
        boolean addAll(Collection<? extends E> c);
        
        //在指定位置插入指定集合
        boolean addAll(int index, Collection<? extends E> c);
        
        //删除list中包含的Collection中的所有元素
        boolean removeAll(Collection<?> c);
        
        //保留list中包含的Collection中的所有元素
        boolean retainAll(Collection<?> c);
        
        //将该列表的每个元素替换为将该运算符应用于该元素的结果。
        default void replaceAll(UnaryOperator<E> operator);
        
        //对list中的元素排列
        default void sort(Comparator<? super E> c);
        
        //删除list中的所有元素
        void clear();
        
        boolean equals(Object o);
        
        int hashCode();
        
        //根据索引获取list中的元素
        E get(int index);
        
        //用指定元素替换指定位置上的元素
        E set(int index, E element);
        
        //在指定位置上增加指定元素
        void add(int index, E element);
        
        //删除指定索引上的元素
        E remove(int index);
        
        //获取对象的第一个索引
        int indexOf(Object o);
        
        //获取对象的最后一个索引
        int lastIndexOf(Object o);
        
        //返回list的list 迭代器
        ListIterator<E> listIterator();
        
        //从指定位置返回list的迭代器
        ListIterator<E> listIterator(int index);
        
        //返回list的子list
        List<E> subList(int fromIndex, int toIndex);
        
        //Creates a {@link Spliterator} over the elements in this list.
        default Spliterator<E> spliterator()
    import java.util.ArrayList;
    import java.util.List;
    
    class Item {
        private int count;
        public Item(int count) {
            this.count = count;
        }
        public int getCount() {
            return count;
        }
    
    }
    
    class Meal {
        private ArrayList<Item> items = new ArrayList<Item>();
    
        void addItem(Item item) {
            items.add(item);
        }
    
        int sum_count() {
            int count =  0;
            for (Item i : items) {
                count += i.getCount();
            }
            return count;
        }
    
    }
    
    public class BuilderPatternDemo {
        public static void main(String args[]) {
            Item item1 = new Item(10);
            Item item2 = new Item(20);
            Item item3 = new Item(30);
    
            Meal meal1 = new Meal();
    
            meal1.addItem(item1);
            meal1.addItem(item2);
            meal1.addItem(item3);
            System.out.println("Sum=" + meal1.sum_count());
        }
    }
    View Code
    error: List is abstract; cannot be instantiated
            List<Person> maleMeet = new List<Person>();
                                    ^
    应该修改为:List<Person> maleMeet = new ArrayList<Person>(); //List是个抽象类,ArrayList是List的实现子类。

    参考:
    https://www.cnblogs.com/cuglkb/p/7027907.html
    https://www.cnblogs.com/Lxiaojiang/p/6231724.html


     

    3.HashTable和HashMap

    1.Hashtable简介
    (1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
    (2)Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
    (3)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。

    2.使用Demo(在遍历时使用是三种遍历方式来对其进行遍历)

    package ThreeWeek;
     
    import java.util.Enumeration;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
     
    public class HashTableTest {
     
            public static void main(String args[]){
                    Hashtable<String, Integer> table = new Hashtable<String, Integer>();
                    
                    //[1]添加元素
                    table.put("zhangsan", 22);
                    table.put("lisi", 33);
                    table.put("wangwu", 44);
                    table.put("houliu", 55);
                    
                    //[2]toString()方式打印
                    System.out.println(table.toString());
                    
                    //[3]Iterator遍历方式1--键值对遍历entrySet()
                    Iterator<Entry<String, Integer>> iter = table.entrySet().iterator();
                    while(iter.hasNext()){
                            Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>)iter.next();
                            String key = entry.getKey();
                            int value = entry.getValue();
                            System.out.println("entrySet:"+key+" "+value);
                    }
                    
                    System.out.println("====================================");
                    
                    //[4]Iterator遍历方式2--key键的遍历
                    Iterator<String> iterator = table.keySet().iterator();
                    while(iterator.hasNext()){
                            String key = (String)iterator.next();
                            int value = table.get(key);
                            System.out.println("keySet:"+key+" "+value);
                    }
                    
                    System.out.println("====================================");
                    
                    //[5]通过Enumeration来遍历Hashtable
                    Enumeration<String> enu = table.keys();
                    while(enu.hasMoreElements()) {
                        System.out.println("Enumeration:"+table.keys()+" "+enu.nextElement());
                    } 
                            
            }
    }
    
    /*
    编译执行:
    $ javac -d ./ HashTableTest.java
    $ java ThreeWeek.HashTableTest
    
    {houliu=55, zhangsan=22, lisi=33, wangwu=44}
    entrySet:houliu 55
    entrySet:zhangsan 22
    entrySet:lisi 33
    entrySet:wangwu 44
    ====================================
    keySet:houliu 55
    keySet:zhangsan 22
    keySet:lisi 33
    keySet:wangwu 44
    ====================================
    Enumeration:java.util.Hashtable$Enumerator@120f0be houliu
    Enumeration:java.util.Hashtable$Enumerator@199d4a86 zhangsan
    Enumeration:java.util.Hashtable$Enumerator@2587b08d lisi
    Enumeration:java.util.Hashtable$Enumerator@6f580c3a wangwu
    */
    View Code

    3.继承关系

    java.lang.Object
        java.util.Dictionary<K, V>
            java.util.Hashtable<K, V>
     
    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable { }

    4.Hashtable和HashMap的区别
    (1)基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。
    (2)null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。
    (3)线程安全:HashMap只是单线程安全的,Hashtable是多线程安全的。
    (4)遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式。

    参考:
    https://blog.csdn.net/jinhuoxingkong/article/details/52022999
    http://www.importnew.com/24822.html

  • 相关阅读:
    [CTF]Capture The Flag -- 夺旗赛
    [DesignPattern]Builder设计模式
    [Git]Git 常用的操作命令
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
    QT 实现 读取 增加 删除 实时操作xml
    QT5-图形视图框架
    C++之QT
    ,即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
    要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给
    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10663078.html
Copyright © 2020-2023  润新知