导航:首页 > 编程语言 > java数组实现

java数组实现

发布时间:2023-05-29 12:32:57

java语言中,数组的实现原理是什么

这个涉及到编译原理的问题,我只能说,这是一个编译规范。在规范中比如:int[],中的int告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!当然我只是简略的这样说,实际上数组是很复杂的!!

❷ 怎么用java数组实现约瑟夫环

用java数组实现约瑟夫环
packageJosephround;

publicclassJoseround{
intsit;
intflagjo=0;
Joseround(){};
Joseround(intx){
sit=x;
}
voidsetflag(intx){
flagjo=x;
}

}
packageJosephround;

publicclassInijose{
Joseroundjo[];
staticintlength=0;
Inijose(){};
Inijose(intx){
jo=newJoseround[x];
for(inti=0;i<x;i++){
jo[i]=newJoseround(i+1);//创建对象数组
length++;
}
}
voiddelete(intn){
for(inti=n;i<length-1;i++){
jo[i]=jo[i+1];
}
length--;
}

}
packageJosephround;

importjava.util.Scanner;

publicclassText{

publicstaticvoidmain(String[]args){
intm,n;
System.out.println("inputm");
Scannerm1=newScanner(System.in);
m=m1.nextInt();
System.out.println("inputn");
Scannern1=newScanner(System.in);
n=n1.nextInt();
inttemp=0;
intx=0;
Inijosejoseph=newInijose(n);
while(joseph.length!=0){
for(inti=1;i<=m;i++){
joseph.jo[x].setflag(i);
if(joseph.jo[x].flagjo==m){
System.out.println(joseph.jo[x].sit);
joseph.delete(x);
x--;
}
if(x<joseph.length-1)x++;
elsex=0;
}
}

}

}

❸ JAVA如何实现动态数组

动态数组用ArrayList 它的底层就是动态数组

ArrayList

ArrayList 集合的存取方式和数组操作很类似,可以按照index顺序来存取集合中的元素,但是还是建议采用更通用的迭代器来进行ArrayList的遍历。
ArrayList与数组最大的区别就是它是可变数组,在初始化ArrayList集合的时候,可以指定一个初始化容量(Capacity 集合中可容纳元素的数量),不指定的时候,系统会指定一个默认的容量值。当我们向ArrayList集合添加元素的时候,实际上是存放元素数量(size)在不断的增加,当容量不变,当数量增长到初始容量大小的时候,因为没有空间导致元素添加阻塞,这时候该集合的容量会按照一定增长策略自动增长,容量增长后,可以继续向集合中添加元素。可变数组是ArrayList的优点,但从另外一个角度考虑,容量的增长是需要付出额外的代价的,所以在性能上有所损失。性能问题的一种解决思路是我们可以在向集合添加大量元素之前,根据欲添加元素的数量,预先扩充容量,采用的是ensureCapacity方法。
ArrayList是一种线性表,在内存中是连续存储的,适合于元素的随机存取。添加和删除操作是需要依据添加的位置来定,如果在ArrayList最后元素后面添加和删除元素,在性能方面还算好,但是如果是在ArrayList中间添加和删除元素的话,代价就会很大。因为,ArrayList需要维护整个集合元素的顺序存储,所以需要处理欲添加和删除元素位置之后的所有元素。
ArrayList的实现不是线程安全的。也就是说,如果有多个线程同时操作ArrayList集合对象,而且其中至少有一个线程的操作涉及到集合对象中元素的修改(添加和删除),则该线程内对集合对象操作的方法需要实现同步。这也是ArrayList与Vector的主要区别。在新的集合框架的实现上,基于性能的考虑,大部分的集合设计都是线程不安全的。如果有同步需求,在用户自己的实现中可以实现同步,实现的方法有2种:
1、在操作集合对象的方法上使用synchronized关键字。
2、如果方法不可修改,则可在定义集合的时候,定义同步化的集合对象(采用Collections工具类的方法),类似:
List list = Collection.synchronizedList(new ArrayList(.....));
(此处深入说明下,在采用Iterator遍历集合的时候,如果有其他线程修改了集合(添加或删除操作),那么Iterator的处理会中止并抛出异常,这是集合处理中的Fail-safe特性)
ArrayList提供的方法中,除了Collection和List的公用方法外,又加入了一些新的方法。

ArrayList(int initialCapacity) 构造器方法增加了集合初始化的最小容量
Void ensureCapacity(int minCapacity) 预扩充ArrayList的容量
Void trimToSize() 把集合的Capacity缩小到Size的大小

下面做一个ArrayList小例子:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
* @功能:ArrayList的应用小例子
* @author JackRui
* @时间:2009.03.31
*/
public class ArrayListDemo {

public static void main(String[] args) {
//利用ArrayList本身的特性
System.out.println("利用ArrayList本身的特性");
ArrayList list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.remove("bbb");
list.add("ddd");
for (int i=0,lsize=list.size();i<lsize;i++){
System.out.println(list.get(i));
}
//利用Iterator遍历
System.out.println("利用Iterator遍历");
Collection clist = new ArrayList();
clist.addAll(list);//添加元素不能采用Iterator接口
Iterator iter = clist.iterator();
while(iter.hasNext()){
String s = (String)iter.next();
if(s.equals("ddd")){
iter.remove();//可以通过Iterator接口对元素进行删除
}else{
System.out.println(s);
}
}
//利用ListIterator遍历
System.out.println("利用ListIterator遍历");
List list2 = new ArrayList();
ListIterator lit = list2.listIterator();
if(!lit.hasNext()){
lit.add("haha");//可以通过ListIterator接口进行集合元素的添加
lit.previous();
System.out.println(lit.next());
}

}

}
运行结果如下:
利用ArrayList本身的特性
aaa
ccc
ddd
利用Iterator遍历
aaa
ccc
利用ListIterator遍历
haha

解析:3种方法中,第一种方法不通用,不建议使用。第2种方法最通用,但仅支持单向遍历,而且对象的添加需要分开实现。第3种方法可以双向遍历,而且可以直接使用ListIterator接口来添加对象。

参考资料:http://fusanjiao.javaeye.com/blog/639963
希望能帮到您,O(∩_∩)O谢谢!

❹ java 用数组的方式接收用户输入的数 并输出数组 求怎么实现

publicclassUtil{

publicstaticvoidmain(String[] args){

java.util.Scannersc=newjava.util.Scanner(System.in);

String[] arr =newString[5];

for(inti =0; i < arr.length; i++){

arr[i] = sc.next();

}

//这里使用util.Arrays的代码输出数组

System.out.println(java.util.Arrays.toString(arr));

}

}

(4)java数组实现扩展阅读:

java中接受用户输入的其他方法

package 控制台接受输入;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.nio.Buffer;

import java.util.Scanner;

public class InputCode {

public static void main(String[] args) throws IOException {

/*

* Scanner类中的方法

* 完美

*/

Scanner input =new Scanner(System.in);

System.out.println("please input your name ");

String name=input.nextLine();

System.out.println(name);

/*

* 缺点:只能接受用户输入的一个字符

*/

System.out.println("enter your name");

char name1 = 0;

try {

//inputstream中的read()方法放回输入流中下一个字符

name1 = (char) System.in.read();

} catch (IOException e) {

e.printStackTrace();

}

System.out.println(name1);

/*

* InputStreamReader和BufferedReader方法

* 优点:可以获取字符串

* 缺点:获取的是int或者string人需要强转

*/

//通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader

//包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,

//BufferedReader in= new BufferedReader(new FileReader("foo.in"));

System.out.println("enter your name");

InputStreamReader input1=new InputStreamReader(System.in);

BufferedReader in=new BufferedReader(input1);

String name2=in.readLine();

System.out.println(name2);

}

}

阅读全文

与java数组实现相关的资料

热点内容
网络加载视频失败是怎么回事 浏览:805
传奇账号在哪个文件夹里 浏览:346
百度app在哪里安装 浏览:587
如何设置路由器网络不断网 浏览:471
传到qq群里的文件怎么删除 浏览:861
索尼安卓71更新日志 浏览:234
怎么找手机里的垃圾app 浏览:540
2015蓝桥杯代码填空 浏览:698
安卓数据库dbexecSQL 浏览:227
doc重命名文件格式 浏览:728
getscreen截图工具下载 浏览:719
共识数据是什么时候开始的 浏览:96
数码管显示电压程序 浏览:479
数据库文件有哪个 浏览:543
途强储存在哪个文件夹 浏览:172
如何恢复被覆盖文件 浏览:611
iphone5用哪个版本最好 浏览:327
extjsgrid禁用 浏览:426
如何查找国外论文的编程代码 浏览:366
暗金颜色代码 浏览:789

友情链接