Java的独特的使用性
- Java是一个面向对象的语言。对我来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。了解类的使用这很重要。
- Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。
- Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运,这是我对Java印象最深的地方。
Java中的容器
- 容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
- 容器类:ArrayList = new ArrayList;用来存放对象
容器类有两个类型:1容器类型ArrayList2元素类型
系统中的类库很重要,且效率也很高 - 所谓容器,就是“放东西的东西”。数组可以看作是一种容器,但是数组的元素个数一旦确定就无法改变,这在实际使用中是很大的不足。一般意义上的容器,是指具有自动增长容量能力的存放数据的一种数据结构。在面向对象语言中,这种数据结构本身表达为一个对象。所以才有“放东西的东西”的说法。
import java.util.ArrayList; //引入一个Arraylist类在包java.util中,用来存储String的范型类,范型类也是一种容器
import java.util.HashSet;
class Value
{
private int i;
public void set(int i) { this.i= i;}
public int get() {return i;}
public String toString() {return " "+i;} //去产生一个
}
public class Notebook {
//定义接口
private ArrayList<String>note = new ArrayList<String>(); //定义一个成员变量note
public void add(String s) //定义一个接口函数add添加对数据的收集
{
note.add(s); //add函数中的数据元素类型是字符串String
}
public void add(String s,int loction) //在数据中的某个位置中添加数据
{
note.add(loction, s);
}
public int getSize() //
{
return note.size(); //用note变量直接调用ArrayList类(容器)中的size,来判断里面放了多少
}
public String getNote(int index) //获得其中的一条数据并返回
{
return note.get(index);
}
public void removeNote(int index) //删除一条记录,无返回
{
note.remove(index);
}
public String[] list() //获得所有的数据记录的列表
{
int[] ia = new int [10];
String[] a = new String[note.size()]; //先创建一个数组,来反映整个容器中的数据
// for(int i=0;i<note.size();i++)
// {
// a[i] = note.get(i);
// }
note.toArray(a); //系统类库中的toArry()可以自动做循环遍历数组替代for循环
return a;
}
Java内部容器类
- Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset等
- ArrayList和HashMap是异步的,Vector和Hashtable是同步的,所以Vector和Hashtable是线程安全的,而ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和Hashtable的执行效率要低于 ArrayList和HashMap。
- 当然在这里我只讨论ArrayList和HashSet的用法
- ├List 接口
│├LinkedList链表
│├ArrayList顺序结构动态数组类
│└Vector 向量
│ └Stack 栈
├Set
│├HashSet
│├TreeSet
│└LinkedHashSet
public static void main(String[] args) {
// TODO Auto-generated method stub
Value v = new Value();
v.set(10);
System.out.println(v);
ArrayList<String> a = new ArrayList<String>();
a.add("first");
a.add("second");
a.add("first");
// for(String s : a) //对于容器类for each循环是一个不错的选择
// {
// System.out.println(s);
// }
System.out.println(a);
System.out.println("************");
HashSet<String> s = new HashSet<String>(); //这个set就是数学中的set中的集合,集合中没有重复的元素
s.add("first");
s.add("second");
s.add("first");
System.out.println(s);
创建对象还是有很多的动作操作
Notebook nb = new Notebook(); //创建操作对象nb基于类Notebook
nb.add("first"); //开始存放
nb.add("second");
nb.add("thired", 1); //插入什么数据在多少行
nb.removeNote(1);
System.out.println(nb.getSize()); //输出在size中存放了的多少条数据
System.out.println(nb.getNote(0)); //输出在多少行的数据是什么
System.out.println(nb.getNote(1));
String[] a = nb.list();
for(String s : a ) //列表中的数据循环遍历数组
{
System.out.println(s);
}
}
}
每一种容器和接口 都存在着一些差异
比如说:
- ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。 和LinkedList一样,ArrayList也是非同步的(unsynchronized)。 - HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的容量成比例。
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset