java集合框架图及介绍
转自:http://hi.baidu.com/%C9%AE_%CC%C6/blog/item/9e2a8b0887008a8ad0581b3d.html
简化图:
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。
Java 2集合框架图
集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。
· Collection 接口是一组允许重复的对象。
· Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
· List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
· Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。
· 容器中的元素类型都为 ......
通俗理解向上转型:
就是子类转型成父类。
class A{}
class B extends A { }
A b = new B();
这个就是向上转型。
向上转型可以像下面这条语句这么简单:
Shape s =new Circle();
这里,创建一个Circle对象,并把得到的引用立即赋值给S矇,这样做看似错误(将一种类型赋值给别一种类型);但实际上没有问题,因为通过继承,Circle就是一种Shape。因此,编译器认可这条语句,也就不会产生错误信息。
假设你调用一个基类方法(它已经在导出类中被覆盖);
s.draw();
你可能再次认为调用的是Shape的draw();因为这毕竟是一个Shape引用,那么编译器是怎样知道去做其它的事情呢?由于后期绑定(多态),还是正确调用了Circle.draw()方法。
总结
1、通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。
DerivedC c2=new DerivedC();
BaseClass a1= c2; //BaseClass 基类,DerivedC是继承自BaseClass的子类
a1.play(); //play() ......
根据JDK5的新特性,用For循环Map,例如循环Map的Key
Java代码
for(String dataKey : paraMap.keySet()) {
System.out.println(dataKey );
}
for(String dataKey : paraMap.keySet()) {
System.out.println(dataKey );
}
注意的是,paraMap 是怎么样定义的,如果是简单的Map paraMap = new HashMap ();那前面的String就只能换成Object了.
循環整個map的key和value
Java代码
Map<Integer,String> map = new LinkedHashMap<Integer,String>();
map.put(1, "星期一");
map.put(2, "星期二");
map.put(3, "星期三");
map.put(4, "星期四");
map.put(5, "星期五");
map.put(6, "星期六");
map.put(7, "星期日");
  ......
1, 保证线程安全的三种方法: a, 不要跨线程访问共享变量b, 使共享变量是final类型的c, 将共享变量的操作加上同步
2, 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易.
3, 编写多线程程序, 首先保证它是正确的, 其次再考虑性能.
4, 无状态或只读对象永远是线程安全的.
5, 不要将一个共享变量裸露在多线程环境下(无同步或不可变性保护)
6, 多线程环境下的延迟加载需要同步的保护, 因为延迟加载会造成对象重复实例化
7, 对于volatile声明的数值类型变量进行运算, 往往是不安全的(volatile只能保证可见性,不能保证原子性).详见volatile原理与技巧中, 脏数据问题讨论.
8, 当一个线程请求获得它自己占有的锁时(同一把锁的嵌套使用), 我们称该锁为可重入锁.在jdk1.5并发包中, 提供了可重入锁的java实现-ReentrantLock.
9, 每个共享变量,都应该由一个唯一确定的锁保护.创建与变量相同数目的ReentrantLock, 使他们负责每个变量的线程安全.
10,虽然缩小同 ......
1. 基本库
cxf-2.2.4.jar
XmlSchema-1.4.5.jar
Wsdl4j-1.6.2.java
2. 在.NET中编写服务,默认参数即可,如:
namespace TestService2Java
{
[WebService(Namespace = "http://temp2java.org/")] //仅此处稍加修改,不改也可
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int MathAdd(int a, int b) //定义一个新方法
&n ......
1,Java3D 作为sun公司较早推出的一项3d技术,是一种高度封装的api,构建在opengl和direct3d之上,可以说是最有名的java的3d技术。由于种种原因(api设计,面向的用户不明确),java3d一直没有办法流行,不久前java3d的团队宣布暂停对java3d新功能的开发,转而为JavaFX开发3d 渲染引擎。同时sun的另一个项目 project wonderland宣布将其渲染引擎由Java3d转为JMonkeyEngine。令人唏嘘的是sun的java3d再次进入尘封状态,大量基于java3d的程序和教程都面临一个非常尴尬的境地;令人高兴的是在这一领域终于有比sun做得更好的团队出现了。引用别人对此事的评价:Java3D is dead! Long live Java "3D"!
2, Lwjgl(http://new.lwjgl.org/index.php) 全名为light weight java game library。作为一个非官方的对java游戏的全面解决方案,lwjgl将游戏图形(opengl)、音效(openal)、控制输入集合为一,以成为java界的directx(不是direct3d)而努力。其在图形方面采用了opengl的java绑定,其函数与c语言版的完全相同,所以对于习惯opengl编程的程序员来说比较友好。目前有大量的java游戏和游戏引擎是基于lwjgl的,它可以说是java游戏社区最广为被使用的函数库之一。
3,Jogl(ht ......