Java基础知识笔记(八:会集类),java基础知识

Java基础知识学习笔记(一),java学习笔记

  掌握面向对象:

Java纯粹的面向对象的顺序设计语言,主要突显为Java完全帮忙面向对象的八个基本特征:承袭、封装、多态。

Java程序的细小单位是,类代表客观世界中全部某种特征的一类东西,那么些类能够变动系统中的多少个目的,而那个指标直接照射成客观世界的各个东西,整个Java程序由贰个一个的类组成。

结构化(主见按效果与利益把软件慢慢撤销合并,面向作用)/面向对象程序设计:(分析>设计>编制程序)SA/OOA
> SD/OOD > SP/OOP

结构化程序设计最小的次第单元是函数,每种函数都担当实现三个意义,整个程序由一个个函数组成,当中作为程序入口的函数成为主函数,主函数各类调用任何函数,从而实现全部软件系统的功能。

其他轻易或复杂的算法都得以由种种、选用、循环结构那四个宗旨协会组合而成。

  UML统第一建工公司模语言:是用来对软件密集系统开始展览可视化建立模型的一种语言。

UML为面向对象开垦种类的出品举行表明、可视化、和编写制定
文档的一种标准语言。

UML的对象是以面向对象图的方式来汇报任何类型的系统具备很宽的应
用世界。在那之中最常用的是创造软件系统的模型但它一律能够用来描述非软件
世界的系统,如机械系统、集团机构或职业经过以及管理目眩神摇数据的消息系
统、具有实时供给的工业系统或工业经过等。综上可得,UML是一个通用的正统建
模语言,能够对别的具备静态结交涉动态行为的体系开始展览建立模型。

UML适用于系统开垦进度中从供给原则描述到系统产生后测量检验的不
同等第。在要求分析阶段能够用用例来捕获用户必要。通过用例建立模型:描述
对系统感兴趣的表面角色及其对系统(用例)的作用须要。深入分析阶段首要关切问
题域中的首要概念(如抽象、类和目的等)和编写制定,须求识别这个类以及它们相
互间的关联,并用UML类图来陈述。为促成用例类之间必要同盟,那足以用
UML动态模型来说述。在剖析阶段,只对难题域的指标(现实世界的概念)建立模型,
而不考虑定义软件系统中技巧细节的类(如管理用户接口、数据库、通信和相互
性等难点的类)。这一个技能细节就要设计阶段引进,由此设计阶段为组织阶段提
供更详细的条件表达。

http://www.bkjia.com/Javabc/1137459.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1137459.htmlTechArticleJava基础知识学习笔记(一),java学习笔记
精晓面向对象:
Java纯粹的面向对象的次第设计语言,重要表现为Java完全辅助面向对象的四个基…

2.2  ArrayList介绍及简便利用

介绍:ArrayList就是风传中的动态数组,换种说法,正是Array的纷纭版本,它提供了之类一些好处: 
动态的增加和收缩成分 
实现了ICollection和IList接口 
灵活的设置数组的轻重

 实例:

ArrayList List = new ArrayList(); 
for( int i=0;i <10;i++ ) //给数组增加10个Int元素 
List.Add(i); 
//..程序做一些处理 
List.RemoveAt(5);//将第6个元素移除 
for( int i=0;i <3;i++ ) //再增加3个元素 
List.Add(i+20); 
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

3.1 HashSet介绍及简便利用

介绍:

 HashSet使用的是相当复杂的法子来囤积成分的,使用HashSet能够最快的拿走集结中的成分,功能极度高(以空间换时间)。会依照hashcode和equals来庞端是不是是同八个目的,假如hashcode同样,而且equals重回true,则是同三个对象,不能够重复存放。

实例:

package com.set;

import java.util.HashSet;
import java.util.Set;

class Student{
    int id;
    public Student(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return this.id+"";
    }
    @Override
    public int hashCode() {
        return this.id;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Student){
            Student  stu = (Student) obj;
            if (stu.id == this.id)
                return true;
        }
        return false;
    }
}
public class HashSetTest {
    public static void main(String[] args) {
        Set<Student> set = new HashSet<Student>();
        Student s1 = new Student(1);
        Student s2 = new Student(1);
        Student s3 = new Student(2);
        set.add(s1);
        set.add(s2);
        set.add(s3);
        for (Student s : set) {
            System.out.println(s);
        }
    }
}

正如上例所示,重写了hashCode()和equals()方法来区分同意对象后,就不能够存放同以目的了。假使注释那七个艺术,则兼具Student对象视为差异目的,都能够寄存。

4.2 HashMap简单利用

介绍:以下实例演示了什么样采用 Collection 类的 iterator()
方法来遍历集结:

import java.util.*;
public class Main {
   public static void main(String[] args) {
      HashMap< String, String> hMap = 
      new HashMap< String, String>();
      hMap.put("1", "1st");
      hMap.put("2", "2nd");
      hMap.put("3", "3rd");
      Collection cl = hMap.values();
      Iterator itr = cl.iterator();
      while (itr.hasNext()) {
         System.out.println(itr.next());
     }
   }}

上述代码运行输出结果为:

3rd
2nd
1st

2  List介绍及简便利用

介绍:List是一动不动的Collection,使用此接口可以正确的操纵种种成分插入的职位。用户能够利用索引(成分在List中的地点,类似于数组下标)来拜会List中的成分,那好像于Java的数组。和底下要提到的Set差异,List允许有同样的成分。
  除了具有Collection接口必备的iterator()方法外,List还提供几个listIterator()方法,重回一个ListIterator接口,和标准的Iterator接口相比较,ListIterator多了有些add()之类的格局,允许增加,删除,设定成分,
仍可以前进或向后遍历。
  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

实例:搜索 List 中的最大最小值

以下实例演示了哪些运用 Collections类的 max() 和 min()
方法来收获List中最大最小值:

import java.util.*;
public class Main {
   public static void main(String[] args) {
      List list = Arrays.asList("one Two three Four five six one three Four".split(" "));
      System.out.println(list);
      System.out.println("最大值: " + Collections.max(list));
      System.out.println("最小值: " + Collections.min(list));
   }}

如上代码运维输出结果为:

[one, Two, three, Four, five, six, one, three, Four]
最大值: three
最小值: Four

2.1  LinkedList介绍及简便利用

介绍:LinkedList类是双向列表,列表中的每一种节点都饱含了对前一个和后叁个要素的援引.
LinkedList的构造函数如下

  1. public LinkedList():  ——生成空的链表
  2. public LinkedList(Collection col):  复制构造函数
    实例:获取链表的率先个和终极二个成分

    import java.util.LinkedList;  
      
    public class LinkedListTest{  
      public static void main(String[] args) {  
         LinkedList lList = new LinkedList();  
        lList.add(“1”);  
         lList.add(“2”);  
         lList.add(“3”);  
        lList.add(“4”);  
         lList.add(“5”);  
      
      
        System.out.println(“链表的第三个成分是 : ” + lList.getFirst());  
         System.out.println(“链表最终一个要素是 : ” + lList.getLast());  
       }  
    }  

4.1 Hashtable介绍及不难利用

介绍:

Hashtable是本来的java.util的一部分, 是四个Dictionary具体的兑现 。

唯独,Java 2
重构的Hashtable达成了Map接口,因而,Hashtable今后并轨到了集聚框架中。它和HashMap类很一般,可是它帮忙同步。

像HashMap同样,Hashtable在哈希表中存款和储蓄键/值对。当使用贰个哈希表,要钦赐用作键的靶子,以及要链接到该键的值。

然后,该键经过哈希管理,所获得的散列码被看做存款和储蓄在该表中值的目录。

实例:

上边包车型地铁次序表达这么些数据结构帮忙的多少个艺术:

import java.util.*;
public class HashTableDemo {

   public static void main(String args[]) {
      // Create a hash map
      Hashtable balance = new Hashtable();
      Enumeration names;
      String str;
      double bal;

      balance.put("Zara", new Double(3434.34));
      balance.put("Mahnaz", new Double(123.22));
      balance.put("Ayan", new Double(1378.00));
      balance.put("Daisy", new Double(99.22));
      balance.put("Qadir", new Double(-19.08));

      // Show all balances in hash table.
      names = balance.keys();
      while(names.hasMoreElements()) {
         str = (String) names.nextElement();
         System.out.println(str + ": " +
         balance.get(str));
      }
      System.out.println();
      // Deposit 1,000 into Zara's account
      bal = ((Double)balance.get("Zara")).doubleValue();
      balance.put("Zara", new Double(bal+1000));
      System.out.println("Zara's new balance: " +
      balance.get("Zara"));
   }}

以上实例编写翻译运行结果如下:

Qadir: -19.08Zara: 3434.34Mahnaz: 123.22Daisy: 99.22Ayan: 1378.0
Zara's new balance: 4434.34

1  集结类简单介绍

集合类寄存于java.util包中。

集合类寄存的都以目标的援用,而非对象自己,出于表明上的有利,大家称集结中的对象正是指集结中指标的援用(reference)。

会集类型主要有3种:list(集)、set(列表)和map(映射)。

具体涉及如下:

Collection
List
├LinkedList
├ArrayList
└Vector
 └Stack

Set

├HashSet
├TreeSet
└Linked HashSet

Map
├Hashtable
├HashMap
└WeakHashMap

   
Collection是最中央的集聚接口,三个Collection代表一组Object,即Collection的要素(Elements)。一些Collection允许有同样的成分而另一部分相当。一些能排序而另一部分非常。Java SDK不提供直接接轨自Collection的类,Java
SDK提供的类都以往续自Collection的“子接口”如List和Set。
 
全体完毕Collection接口的类都无法不提供八个正规的构造函数:无参数的构造函数用于创制二个空的Collection,有一个Collection参数的构造函数用于创设贰个新的Collection,这么些新的Collection与传播的Collection有平等的因素。后一个构造函数允许用户复制一个Collection。
 
怎么着遍历Collection中的每叁个因素?不论Collection的实际上类型怎样,它都援救三个iterator()的点子,该格局再次回到二个迭代子,使用该迭代子就能够逐个拜访Collection中每三个因素。规范的用法如下:
    Iterator it = collection.iterator(); // 获得贰个迭代子
    while(it.hasNext()) {
      Object obj = it.next(); // 获得下三个要素
    }

 

 

 


4  Map介绍及简便利用

介绍:

Map接口中键和值一一映射. 能够通过键来赢得值。

给定一个键和二个值,你能够将该值存款和储蓄在三个Map对象.
之后,你能够经过键来访问对应的值。

当访谈的值子虚乌有的时候,方法就能抛出多个NoSuchElementException卓殊.

当指标的项目和Map里成分类型不相配的时候,就能够抛出二个ClassCastException相当。

当在不容许使用Null对象的Map中使用Null对象,会抛出二个NullPointerException
万分。 

当尝试修改三个只读的Map时,会抛出一个UnsupportedOperationException格外。

序号

方法描述

1

void clear( )
 从此映射中移除所有映射关系(可选操作)。

2

boolean containsKey(Object k)
如果此映射包含指定键的映射关系,则返回 true。

3

boolean containsValue(Object v)
如果此映射将一个或多个键映射到指定值,则返回 true。

4

Set entrySet( )
返回此映射中包含的映射关系的 Set 视图。

5

boolean equals(Object obj)
比较指定的对象与此映射是否相等。

6

Object get(Object k)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

7

int hashCode( )
返回此映射的哈希码值。

8

boolean isEmpty( )
如果此映射未包含键-值映射关系,则返回 true。

9

Set keySet( )
返回此映射中包含的键的 Set 视图。

10

Object put(Object k, Object v)
将指定的值与此映射中的指定键关联(可选操作)。

11

void putAll(Map m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。

12

Object remove(Object k)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

13

int size( )
返回此映射中的键-值映射关系数。

14

Collection values( )
返回此映射中包含的值的 Collection 视图。

 

 实例: 

import java.util.*;
public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }}

如上实例编写翻译运营结果如下:

Map Elements
        {Mahnaz=31, Ayan=12, Daisy=14, Zara=8}

 

 


3.2 TreeSet介绍及简便利用

介绍:

 TreeSet也不可能寄存重复对象,可是TreeSet会自行排序,如若存放的对象不可能排序则会报错,所以寄放的指标必须钦点排序准绳。排序准绳包涵自然排序和客户排序。

  ①当然排序:TreeSet要增加哪个指标就在哪些目的类地点完结java.lang.Comparable接口,并且重写comparaTo()方法,再次来到0则代表是同二个目的,不然为不一致对象。

     
②客户排序:创设叁个第三方类并达成java.util.Comparator接口。不分互相写方法。定义群集情势为TreeSet
ts = new TreeSet(new 第三方类());

实例:

上边三个例子用TreeSet存放自然排序的目的:

package com.set;

import java.util.Set;
import java.util.TreeSet;

class Student1 implements Comparable<Student1>{
    int id;
    public Student1(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return this.id+"";
    }
    @Override
    public int hashCode() {
        return this.id;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Student1){
            Student1  stu = (Student1) obj;
            if (stu.id == this.id)
                return true;
        }
        return false;
    }
    public int compareTo(Student1 o) {
        return (this.id-o.id);
    }
}

public class TreeSetTest {
    public static void main(String[] args) {
        Set<Student1> set = new TreeSet<Student1>();
        Student1 s1 = new Student1(5);
        Student1 s2 = new Student1(1);
        Student1 s3 = new Student1(2);
        Student1 s4 = new Student1(4);
        Student1 s5 = new Student1(3);
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        set.add(s5);
        for (Student1 s : set) {
            System.out.println(s);
        }
    }

}

 输出结果为:

1
2
3
4
5

3.3 Linked HashSet介绍

介绍:LinkedHashSet遵照插入顺序保存对象,同偶然候还保存了HashSet的查询速度。

 

 

 


2.3  Vector介绍及简便利用

介绍:

Vector类达成了一个动态数组。和ArrayList和一般,不过双方是见仁见智的:

Vector是一同访谈的。

Vector富含了众多古板的议程,那一个方式不属于集结框架。

Vector首要用在优先不知底数组的深浅,恐怕只是须要三个方可变越来越大小的数组的气象。

Vector类扶助4种构造方法。

首先种构造方法成立一个暗中认可的向量,默许大小为10:

Vector()

其次种构造方法创设内定大小的向量。

Vector(int size)

其三种构造方法创造钦命大小的向量,何况增量用incr钦命.
增量表示向量每回扩大的因素数目。

Vector(int size,int incr)

第四中构造方法创制叁个饱含集合c元素的向量:

Vector(Collection c)

实例:

import java.util.*;
public class VectorDemo {

   public static void main(String args[]) {
      // initial size is 3, increment is 2
      Vector v = new Vector(3, 2);
      System.out.println("Initial size: " + v.size());
      System.out.println("Initial capacity: " +
      v.capacity());
      v.addElement(new Integer(1));
      v.addElement(new Integer(2));
      v.addElement(new Integer(3));
      v.addElement(new Integer(4));
      System.out.println("Capacity after four additions: " +
          v.capacity());

      v.addElement(new Double(5.45));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Double(6.08));
      v.addElement(new Integer(7));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Float(9.4));
      v.addElement(new Integer(10));
      System.out.println("Current capacity: " +
      v.capacity());
      v.addElement(new Integer(11));
      v.addElement(new Integer(12));
      System.out.println("First element: " +
         (Integer)v.firstElement());
      System.out.println("Last element: " +
         (Integer)v.lastElement());
      if(v.contains(new Integer(3)))
         System.out.println("Vector contains 3.");
      // enumerate the elements in the vector.
      Enumeration vEnum = v.elements();
      System.out.println("\nElements in vector:");
      while(vEnum.hasMoreElements())
         System.out.print(vEnum.nextElement() + " ");
      System.out.println();
   }}

上述实例编写翻译运营结果如下:

Initial size: 0
Initial capacity: 3
Capacity after four additions: 5
Current capacity: 5
Current capacity: 7
Current capacity: 9
First element: 1Last element: 12Vector contains 3.
Elements in vector:1 2 3 4 5.45 6.08 7 9.4 10 11 12

2.3.1  Stack介绍及简便利用

介绍:

栈是Vector的二个子类,它完毕了叁个正式的后进先出的栈。 

库房只定义了默许构造函数,用来创设贰个空栈。
仓库除了席卷由Vector定义的富有办法,也定义了团结的有个别方法。

Stack()

除开由Vector定义的有所办法,自身也定义了一些措施:

序号

方法描述

1

boolean empty() 
测试堆栈是否为空。

2

Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。

3

Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。

4

Object push(Object element)
把项压入堆栈顶部。

5

int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

 

实例:

上边包车型地铁次序表达那几个集结所支持的两种办法

import java.util.*;
public class StackDemo {

   static void showpush(Stack st, int a) {
      st.push(new Integer(a));
      System.out.println("push(" + a + ")");
      System.out.println("stack: " + st);
   }

   static void showpop(Stack st) {
      System.out.print("pop -> ");
      Integer a = (Integer) st.pop();
      System.out.println(a);
      System.out.println("stack: " + st);
   }

   public static void main(String args[]) {
      Stack st = new Stack();
      System.out.println("stack: " + st);
      showpush(st, 42);
      showpush(st, 66);
      showpush(st, 99);
      showpop(st);
      showpop(st);
      showpop(st);
      try {
         showpop(st);
      } catch (EmptyStackException e) {
         System.out.println("empty stack");
      }
   }}

上述实例编写翻译运营结果如下:

stack: [ ]
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: [ ]
pop -> empty stack

3  Set介绍

介绍: 

   
Set不保留重复的成分。Set中最常被利用的是测量检验归属性,你能够很轻松的询问某些对象是否在有些Set中。Set具备与Collection完全等同的接口,由此并没有其他附加的职能。实际上Set便是Collection,只是行为分歧。

 
达成了Set接口的要害有HashSet、TreeSet、LinkedHashSet那多少个共同点正是种种同样的项只保留一份。他们也可以有不一样点,差距如下:

Java基础知识笔记(八:集结类),java基础知识

目录
1  集合类简介 
2  List介绍及简单使用 
2.1  LinkedList介绍及简单使用 
2.2  ArrayList介绍及简单使用 
2.3  Vector介绍及简单使用
2.3.1  Stack介绍及简单使用 
3  Set介绍 
3.1 HashSet介绍及简单使用 
3.2 TreeSet介绍及简单使用 
3.3 Linked HashSet介绍 
4  Map介绍及简单使用 
4.1 Hashtable介绍及简单使用 
4.2 HashMap简单使用 
4.3 WeakHashMap介绍 

 

 


4.3 WeakHashMap介绍

介绍:

  WeakHashMap实现了Map接口,是HashMap的一种完毕,他动用弱援引作为当中数据的积存方案,WeakHashMap能够看做轻巧缓存表的缓慢解决方案,当系统内部存储器非常不足的时候,垃圾采撷器会自动的破除未有在别的任何地方被援引的键值对。

 
 借使急需用一张相当大的HashMap作为缓存表,那么能够虚构动用WeakHashMap,当键值子虚乌有的时候加多到表中,存在即抽取其值。

WeakHashMap weakMap = new WeakHashMap<Integer, byte[]>();

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

Integer ii = new Integer(i);

weakMap.put(ii, new byte[i]);

}

 

参照他事他说加以考察资料:

      1、Java Vector 类

       2、Java 实例 – HashMap遍历

       3、Java Hashtable 接口

       4、Java Map 接口

       5、Java Stack 类

       6、Java会集类详解

       7、java笔记四:Set接口

 

http://www.bkjia.com/Javabc/1174564.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1174564.htmlTechArticleJava基础知识笔记(八:集合类),java基础知识 目录
1 集结类简要介绍 2 List 介绍及简便利用 2.1 LinkedList 介绍及简便利用 2.2
ArrayList 介绍及轻巧…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图