• Java数据结构----集合


    Java的集合可以分为两类,

    第一类是以数组为代表,这类集合可以描述线性表类型的数据结构,以Collection为基类,其中自己用过或者了解的有

    实现List接口的类:LinkedList,ArrayList,Vector,Stack...

    实现Set接口的类:TreeSet,HashSet...

    第二类是以Map为代表的“键值对”类型的数据结构,以Map为基类,其中有

    HashMap,HashTable,Tree

    第一类

    Vector

    Vector与数组相比,Vector对象可以很好的实现元素的插入和删除,也拥有动态增长特性

    1.构造函数(4)

    • Vector()
    • Vector(<E> c)使用泛型(generic type)确定容纳对象的类型
    • Vector(int initialCapacity,int capacityIncrement)

      能为初始化的Vector对象分配长度为initialCapacity的容量,可以在必要的时候以capacityIncrement的速度自增长其容量空间

    • Vector(int initialCapacity)

    2.常用方法

    • addElement(E obj)向Vector中添加元素

      通过这个方法可把obj对象添加到该Vector对象的尾部,同时Vector的size加1。

    • insertElementAt(E obj)在指定索引处添加元素

      通过这个方法,可以把obj对象添加到参数指定的index索引处,此后的Vector对象里的各内容自动向后移动一个单位

      setElement(E obj,int index)替换指定位置的元素

    • boolean removeElement(Object obj)删除Vector对象中的第一个obj对象,返回一个bool类型的值用来表示是否找到并删除指定对象
    • void removeElementAt(int index)删除指定位置的元素
    • void removeAllElements()删除Vector对象中的所有元素,size置为0
    • int size()获得Vector当前长度
     1 /*
     2  *@author SimonKly E-mail:deGaulleKong@gmail.com
     3  *@version:2017-2-25
     4  */
     5 import java.util.Vector;
     6 public class VectorTest {
     7     public static void main(String[] args) {
     8 //        实例一个Vector对象
     9         Vector v=new Vector();
    10 //        向Vector对象中添加元素
    11         v.addElement(new Integer(1));
    12         v.addElement("two");
    13         v.addElement("Three");
    14 //        向Vector对象指定位置插入
    15         v.insertElementAt(0, 0);
    16 //        替换指定位置的元素
    17         v.setElementAt("four",3);
    18 //        遍历Vector对象
    19         System.out.print("element :");        
    20             for(int i=0;i<v.size();i++){
    21                 if(v.elementAt(i) instanceof Integer)//判断元素类型
    22                     System.out.print(" "+((Integer)v.elementAt(i)));
    23                 else
    24                     System.out.print(" "+(String)v.elementAt(i));
    25             }
    26         
    27         System.out.println();
    28 //        删除指定位置的元素
    29         v.removeElementAt(3);
    30         System.out.print("element :");
    31 //        遍历验证
    32         for(int i=0;i<v.size();i++){
    33             if(v.elementAt(i) instanceof Integer)
    34                 System.out.print(" "+((Integer)v.elementAt(i)));
    35             else
    36                 System.out.print(" "+(String)v.elementAt(i));
    37         }
    38         System.out.println();
    39 //        删除所有元素
    40         v.removeAllElements();
    41         if(v.size()==0){
    42             System.out.println("Cleared!");
    43         }
    44     }
    45 }

    Stack

    Stack继承了Vector,Stack重用 了Vector的存储对象空间和访问线性表方法,而Stack先进后出的特性可以看作Vector的特例

    1.构造函数

    • Stack()
    • Stack(<E s>)

    2.常用方法

    • E push(E item)向堆栈中压入item,并将item对象返回
    • E peek()返回指定栈顶元素的类型
    • E pop()弹出栈顶元素
    • boolean empty()判断堆栈是否为空
     1 package $1;
     2 
     3 /**
     4 *@author: SimonKly
     5 *@E-mail:deGaulleKong@gmail.com
     6 *@date: 2017年2月27日
     7 */
     8 
     9 import java.util.Iterator;
    10 import java.util.Stack;
    11 
    12 public class StackTest {
    13 
    14     public static void main(String[] args) {
    15         Stack s=new Stack();
    16         s.push("one");
    17         s.push("two");
    18         s.push("three");
    19         Iterator iterator=s.iterator();
    20         System.out.println("iterator:");
    21         while(iterator.hasNext()){
    22             System.out.println(iterator.next());
    23         }
    24         System.out.println("normal:");
    25         for(int i=0;i<s.size();i++){
    26             System.out.println(s.get(i));
    27         }
    28         System.out.println("pop");
    29         while(!s.isEmpty()){
    30             System.out.println(s.pop());
    31         }
    32         //由于继承了Vector则,不好用法则会Stack把当成Vector
    33         s.addElement("badusage1");
    34         s.addElement("badusage2");
    35         s.addElement("badusage3");
    36         for(int i=0;i<s.size();i++){
    37             System.out.println(s.elementAt(i));
    38         }
    39     }
    40 
    41 }

    List接口

    Vector和Stack都实现了List接口

    其中的方法

    • 插入

        void add(int index,E element)在索引号index后插入element元素

        boolean add(E o)直接插入到链表的最后

    • 删除

        E remove(int index)删除链表中指定的位置

        boolean remove(Object o)删除链表中第一个元素

    • 获取元素

        E get(int index)获取指定位置的元素

    int size()统计有多少元素

    int indexOf(Object obj)获取obj对象的索引位置

    List<E>subList(int fromIndex,int to Index)截取链表,得到链表里的从fromindex开始到toIndex结束的子链表

    void clear()清空链表

    LinkedList实现了List

    1.构造函数

    LinkedList()

    LinkedList(Collection c)

    LinkedList(<E> c)

    2.添加元素

    void addFirst(E obj)//添加头元素

    void addLast(E obj)//添加尾元素

    3.获取元素

    E getFirst()//获取第一个

    E getLast()//获取最后一个

    4.删除元素

    E removeFirst()//删除第一个并返回第一个元素

    E removeLast()//删除最后一个并返回最后一个元素

     1 package $1;
     2 
     3 /**
     4 *@author: SimonKly
     5 *@E-mail:degaullekong@gmail.com
     6 *@date: 2017年2月27日
     7 */
     8 import java.util.Iterator;
     9 import java.util.LinkedList;
    10 import java.util.List;
    11 public class LinkedListTest {
    12 
    13     public static void main(String[] args) {
    14 //        使用泛型实例化一个LinkedList对象
    15         List<String>ll=new LinkedList<String>();
    16 //    向LinkedList中添加元素
    17         ll.add("one");
    18         ll.add("two");
    19         ll.add("three");
    20 //        不使用泛型实例化一个LinkedList对象
    21         List l=new LinkedList();
    22         l.add("first");
    23         l.add("second");
    24         l.add(3);//可以放入不同的数据类型
    25 //        打印指定位置的元素
    26         System.out.println("the index of 3:"+l.indexOf(3));
    27 //        移除指定位置的元素
    28         ll.remove(2);
    29 //        使用Iterator对象遍历
    30         Iterator iterator=ll.iterator();
    31         while(iterator.hasNext()){
    32             System.out.println(iterator.next());
    33         }
    34 //        使用一般遍历方法遍历
    35         for(int index=0;index<l.size();index++){
    36             System.out.println(l.get(index));
    37         }    
    38     }
    39 }

    不允许有重复元素的Set接口

    接口中的方法:

    1.添加元素:boolean add(E o)用到泛型,如果待插入的元素不在Set中则返回true,反之,返回false

    2.删除指定元素:boolean remove(Object o)如果找到并成功删除则返回true ,反之,返回false

    3.判断Set是否为空:boolean isEmpty()

    4.返回Set大小的Size();

    实现的类有HashSet,TreeSet(输出是有序)

    第二类

     HashTable

    1.构造函数

    HashTable()//初始容量为11,默认装载因子0.75

    HashTable(int initialCapacity)//初始化容量,默认装载因子0.75

    HashTable(int initialCapacity,float loadFactor)//初始化容量和装载因子

    HashTable(<K,V>t)//使用泛型

    2.添加键值

    put(K key ,V value)

    3.根据键值获取值

    V get(Object key)

    4.判断“键”和“值”是否存在

    boolean containsKey(Object key)

    boolean containsValue(Object value)

    封装散列表数据结构的Map接口,实现的类:HashMap和TreeMap

    其中方法:

    1.V put(K key,V value)插入键值对,并返回value

    2.V get(Object key)

    3.boolean containsKey(Object key) boolean containsValue(Object value)判断是否存在键或者值

    4.Set<Map.Entry<K,V>> entrySet()//返回键值对映射关系,用于遍历

     1 package $2;
     2 /**
     3 *@author: SimonKly
     4 *@E-mail:degaullekong@gmail.com
     5 *@date: 2017年2月27日
     6 */
     7 import java.util.HashMap;
     8 import java.util.Iterator;
     9 import java.util.Map;
    10 import java.util.Map.Entry;
    11 import java.util.TreeMap;
    12 
    13 public class MapTest {
    14     static void prt(Map m)
    15     {
    16         Iterator i=m.keySet().iterator();
    17         while(i.hasNext()){
    18             Object o=i.next();
    19             System.out.println("key="+o+",value="+m.get(o));
    20         }
    21     }
    22     public static void main(String[] args) {
    23         Map m;
    24             
    25         System.out.println("HashMap例子:");
    26         m=new HashMap();
    27         m.put(1, "one");
    28         m.put(2, "two");
    29         m.put(3, "three");
    30         m.put(4, "four");
    31         MapTest.prt(m);
    32         
    33         System.out.println("TreeMap例子:");
    34         m=new TreeMap();
    35         m.put(3, "three");
    36         m.put(4,"four");
    37         m.put(1, "one");
    38         m.put(2, "two");
    39         MapTest.prt(m);
    40 //    使用Entry对象遍历Map
    41         System.out.println("Entry对象遍历Map:");
    42         HashMap<Integer,String> em=new HashMap<Integer,String>();
    43         em.put(3, "three");
    44         em.put(4,"four");
    45         em.put(1, "one");
    46         em.put(2, "two");
    47 //        使用Entry对象遍历
    48         for(Entry<Integer,String> entry:em.entrySet())
    49         {
    50             System.out.println("key="+entry.getKey()+",value="+entry.getValue());
    51         }
    52     }
    53 }
  • 相关阅读:
    神经网络与深度学习(邱锡鹏)编程练习 3 Logistic回归、softmax回归、支持向量机(SVM)
    神经网络与深度学习(邱锡鹏)编程练习 3 Logistic回归 softmax回归 源代码 tf版
    神经网络与深度学习(邱锡鹏)编程练习 3 实验1 Logistic回归 pytorch
    神经网络与深度学习(邱锡鹏)编程练习 2 基函数回归 Jupyter导出版 TensorFlow 2.9
    神经网络与深度学习(邱锡鹏)编程练习4 FNN 简单神经网络 Jupyter导出版 numpy
    神经网络与深度学习(邱锡鹏)编程练习4 FNN 简单神经网络
    神经网络与深度学习(邱锡鹏)编程练习 3 Logistic回归 Jupyter导出版 TensorFlow2.9
    神经网络与深度学习(邱锡鹏)编程练习 2 实验1 线性回归的参数优化 最小二乘法
    05月29日总结
    程序的装入和链接
  • 原文地址:https://www.cnblogs.com/SimonKly/p/6429950.html
Copyright © 2020-2023  润新知