JAVA先进-设置(1)

>Arrays

基本阵列

1.常见的数组产生于main() 函数,数组下标的索引不能超过0到int的范围

2.当程序试图訪问数组的第一个或者最后一个数据的时候,会发生ArrayIndexOutOfBoundsException异常。

(相当于链表)

3.遗憾的是,数组没有java源码。它是由Object对象组成的带有顺序的集合。

声明/初始化

1.数组的类型有基本类型。Object类型。对于数组的声明仅仅须要添加[]

2.能够是int[] test , int []test , int test[] 三种形式。

3.数组的定义必须声明个数。定义完数组通常使用循环或者一个个赋值。

原始类型/对象类型的数组

原始类型的数组维护着数据的顺序列表,而对象数据则把数据存在对象中,数组仅仅是引用了对象的地址。

多维数组

1.像数组引用对象,如果要维护多个连续的数组 这时候就须要多维数组。

2.多维数组的初始化也要指定长度。比方2维数组,第1个下标表示维护多少个数组,第2个下标表示维护

数组里面的个数。

3.多维数组的值必须由多个维度共同确定。

变量初始化:当类型数组指定个数时,内存会为数组指定内存

并给默认的变量,一般依据类型指定,如int指定为0,double为0.0d,String为null;

为方法传递数组以及获取返回值:

当传递參数的时候,系统给方法传递的是数组的引用,因此你能够在数组改变其值.

Copying 和 Cloning 数组:

由于数组在初始化已经固定,当你想为数组扩容的时候,就必须使用复制或者克隆.

系统为Copy提供了一个工具方法,该方法提供源流的目标。開始位置和复制长度;

当数据长度不够复制时抛出ArrayIndexOutOfBoundsException

System.arraycopy(original,0, resultArray,0,original.length);

系统相同提供了拷贝方法array.clone();来实现复制。

在类型数组中,拷贝是复制值,而在对象数组中,仅仅是对对象做了一次浅拷贝;

/**
 * 	@author Lean  @date:2014-10-16
 */
public class CopyAndCloneArrays {

	public static void main(String[] args) throws CloneNotSupportedException {
		copyingArray();

	}

	private static void copyingArray() throws CloneNotSupportedException {
		int[] array1={1,2,3,4,5};
		int[] array2={1,2,3,4,5,6,7,8,9};
//		System.out.println(array1.length+" "+doubleArray(array1).length);
//		System.out.println(array2
//				.length+" "+doubleArray(array2).length);
		Book[] array3={new Book(new Price(20)),new Book(new Price(30))};
		Book[] array4=doubleArray(array3);
		array3[0].price.value=18;
		System.out.println(array3[0].price);
		System.out.println(array4[0].price);

	}  

	static int[] doubleArray(int[] original){
		int[] resultArray=new int[original.length*2];
		System.arraycopy(original,0, resultArray,0,original.length);
		return resultArray;
	}

	static Book[] doubleBookArray(Book[] original){
		Book[] resultArray=new Book[original.length*2];
		System.arraycopy(original,0, resultArray,0,original.length);
		return resultArray;
	}

	static Book[] doubleArray(Book[] original){
		return (Book[])original.clone();
	}

}

class Price implements Cloneable{

	public int value;

	public Price(int value) {
		this.value = value;
	}

	@Override
	protected Object clone() throws CloneNotSupportedException {
		Price obj=null;
		try {
			obj=(Price)super.clone();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		return obj;

	}

	@Override
	public String toString() {
		return value+"";
	}

}

class Book implements Cloneable{

	public Book(Price price) {
		this.price = price;
	}

	public Price price;

	@Override
	protected Object clone() throws CloneNotSupportedException {
		Book obj=null;
		try {
			obj=(Book)super.clone();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		obj.price=(Price) price.clone();
		return obj;
	}
}

数组引用和相等的推断:

>当一个变量引用一个数组,比方a引用arrray1,那么把a赋值给变量b,b相同引用array1.

>当两个对象同一时候引用一个数组,那么推断他们能够使用a==b;当两个对象通过

克隆复制得到一个数组,那么他们引用不同内存地址,仅仅能使用equals();

数组与字符串:

在C中,总是把char[]数组来表示string,而在Java中,数组跟字符串是能够互转的

string1.toByteArray()把字符串转化成数组。

new String(byte[])能够建立字符串;

数组反射:

/**
 * 	@author Lean  @date:2014-10-16
 */
public class ArrayReflection {

	public static void main(String[] args) {
//		checkArray();
//		定义数组
//		reflectNewInstance();
//		存取值
//		tryGetSet();
	}

	private static void tryGetSet() {
		int[] data={1,2,3,4};
		Array.setInt(data,2, 12);
		Array.setInt(data,4, 12);
		System.out.println(Array.get(data, 2));
	}

	private static void reflectNewInstance() {
		float[][] bowling=(float[][]) Array.newInstance(float[].class,4);
		for (int i = 0; i < bowling.length; i++) {
			bowling[i]=(float[]) Array.newInstance(Float.TYPE, i+1);
		}
		System.out.println(bowling[2].length);
	}

	private static void checkArray() {
		final int[] a={1,2,3};
		Class objClass=a.getClass();
		if (objClass.isArray()) {
			Class componentClass=objClass.getComponentType();
			System.out.println(componentClass.getName());
			System.out.println(Array.getLength(a));
		}
	}

}

>The Vector Classes

----Vector----

1.创建Vector能够指定初始容量和增幅,也能够把包装还有一个List,如:

Vector v=new Victor(Arrays.asList(array));

2.Vector遵循队列的标准

能够同过add(obj)/addElement()加入到队列末尾,

能够通过索引add(index,obj)/insertElement(obj,index)加入索引所在的位置

也能够将一个Collection队列所有加入到末尾addAll(list);

3.由于该Vector不能加入原始类型,在新版本号的jdk中,系统会为我们自己主动装箱;打印

Vector使用toString();

4.删除Vector能够

通过引用删除remove(obj)/removeElementAt(index);

通过索引删除remove(index)/removeElementAt(index);

通过删除部分removeAll(list)/removeRange(from,to);

所有删除clear()/removeAllElement();

保留Collection所选 删除其它 retainAll(list)

5.替换set(index,obj)/setElement(obj,index)

6.查看/设置队列大小 size()/setSize()

7.存储容量:容量是用来应对动态队列的频繁增减;假使队列容量太小,就应该在添加

队列之前使用ensureCapacity(int minCapacity)先扩容;如果容量不够 一般

添加1倍的容量;与size()不同,size代表当前的个数。容量代表能放多少。当

对队列操作完成。你能够调用trimToSize()来优化降低空间。

8.Vector的不变性:

如果有一个变量仅做阅读,为防止变化Collections提供了unmodifiableList(v);

9.对元素进行枚举

public Enumeration elements()。

while (e.hasMoreElements()) {

process(e.nextElement());

}

扩展AbstractList

Iterator i = v.iterator();

while (i.hasNext()) {

process(e.next());

}

10.多维Vector的迭代取值:

MyType o = (MyType)((Vector)vector.elementAt(3)).elementAt(2);

11.检验Vector元素:

推断存在:contains(obj)/containsAll(list);

索引:indexOf(obj)假设存在2个 得到的是顺序的第1个的索引

反向索引:lastIndexOf(obj)如上反向

12.Copy和clone

调用clone()直接复制或者copyInto(array)先转换成数组再间接复制

13.截取Vector.

public List subList(int fromIndex, int toIndex)

14.使用equals()推断Vector内容是否相等;

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-30 02:07:06

JAVA先进-设置(1)的相关文章

android 用java动态设置布局(增添删除修改布局)

XML对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果. Java设置布局不具有这个优势.但是java却可以动态对布局进行操作,这是xml所做不到的.笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件. 首先说一下动态设置布局在项目中的应用,拿高德地图举个例子,如下图:    我们可以看到,高德地图的默认界面与点击地图之后的界面是不一样的,上面同样的控件在layout中的位置也不一样,这个用xml便

JAVA如何设置代理server,s取消代理erver

1.一个简短的引论 代理server(Proxy Server)是一种重要的server安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用. 代理server大多被用来连接INTERNET(国际互联网)和INTRANET(局域网).主要功能:就是代理网络用户去取得网络信息.形象的说,它是网络信息的中转站.本文主要介绍怎样使用java代码设置代理server. 主server为了防止被伪用户攻击,统一让用户通过代理server去訪问主server,这样做的安全性是显而

java中设置代理的两种方式

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import jav

java JFrame 设置背景颜色无效的理解

广州疯狂软件教育Java培训,iOS培训分享 在开发Java应用程序时,通常情况下利用JFrame创建窗口.利用JFrame创建的窗口分别包含一个标题.最小化按钮.最大化按钮和关闭按钮 1.在你使用JFrame创建窗体时的情况: 在你直接调用setBackground(Color.red)这个方法后,你的确设置了JFrame的背景颜色,而你看到的却不是直接的JFrame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所

java 虚拟机设置 Xms Xmx PermSize MaxPermSize

Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase this memory.   Failure

JAVA 堆设置

JAVA 堆设置 第四节 堆已经讲得差不多啦,这章我们以一个例子来说说如何设置以及当发生堆溢出的时候怎么排查问题.先看一小段代码:         代码中使用了一个无限循环来为list添加对象,如果采用默认的堆大小的话可能要等待好久才能出现堆溢出的错误,因此我们要将其设置小一点: -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError,elipse中的设置方法我们在第一章讲过了,这里不多说啦.-Xms10m,意思就是堆的最小内存为10m.同理-Xmx10m

Citrix NetScaler vpx在通过IE登录时JAVA的设置

NetScaler在通过IE登录时JAVA的设置 相信很多人在初次部署的时候都会遇到Java安全属性设置限制的困扰,下面截图看一下如何去设置java的安全设置 控制面板里打开java属性面板,三张图解决java的设置

js、Java后台设置cookie

概述:小开心下,又学到了点东西 JS设置cookie //添加时间函数 function SetCookie(name, value){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = name + "=" + escape(value) + ";path=/;expires=" + exp.

JAVA代码设置selector不同状态下的背景

Selector设置button点击效果(详细)以及常见问题https://www.jianshu.com/p/a0ddba6d7969 Android 代码动态设置TextView的背景.颜色Selectorhttps://www.aliyun.com/jiaocheng/33771.html JAVA代码设置selector不同状态下的背景颜色https://blog.csdn.net/ZaoAnDiQiu/article/details/52161386 一个工具类搞定drawable下扎