服务热线

029-87595239

当前位置:首页 > 社区新闻 > 技术文章 >

Java中数组的知识

编程过程中,数组也随之产生,数组可以存储数据类型,因此西安Java培训整理了数组的相关知识。

:目标数组的概述

  数组和调集存储引证数据类型,存的都是地址值

:调集的由来及调集承继系统图

 1.调集的由来 

    数组长度是固定,当增加的元素超过了数组的长度时需求对数组从头界说,太麻烦,java内部给咱们供给了调集类,能存储恣意目标,长度是能够改动的,跟着元素的增加而增加,跟着元素的削减而削减 
 2.数组和调集的差异
  差异1 : 
     数组既能够存储根本数据类型,又能够存储引证数据类型,根本数据类型存储的是值,引证数据类型存储的是地址值
     调集只能存储引证数据类型(目标)调集中也能够存储根本数据类型,可是在存储的时分会主动装箱变成目标
   差异2:
     数组长度是固定的,不能主动增加
       调集的长度的是可变的,能够根据元素的增加而增加
 3.数组和调集什么时分用
    假如元素个数是固定的引荐用数组
    假如元素个数不是固定的引荐用调集

:Collection调集的根本功用测验
 1.根本功用
  boolean add(E e)

    add办法假如是List调集一直都回来true,因为List调集中是能够存储重复元素的;假如是Set调集,当存储重复元素就会回来false.

  boolean remove(Object o)

1 System.out.println(colle.remove(1));//删去指定元素,能够删去根本数据类型,主动装箱.2         System.out.println(colle);

  void clear()
  boolean contains(Object o)
  boolean isEmpty()
  int size()

 2.留意:
  collectionXxx.java运用了未经检查或不安全的操作.
    留意:要了解详细信息,请运用 -Xlint:unchecked从头编译.
  java编译器以为该程序存在安全隐患
    温馨提示:这不是编译失利,所以先不必理睬,等学了泛型你就知道了

:调集的遍历之调集转数组遍历

调集的遍历之调集转数组遍历
 1.调集的遍历
  其实就是顺次获取调集中的每一个元素。
 2.把调集转成数组,能够完成调集的遍历

:Collection调集的带All功用测验

 1.boolean addAll(Collection c)

  将c中的每一个元素增加到指定引证中,add(Collection c)直接将c作为一个元素增加到指定引证中

  2.boolean removeAll(Collection c)

   删去的是交集
  3.boolean containsAll(Collection c)

   判别调用的调集是否包括传入的调集
  4.boolean retainAll(Collection c)

   取交集,假如调用的调集发生改动就回来true,不然回来false.

:调集的遍历之迭代器遍历

 1.迭代器的运用

List list = new ArrayList();

Student stu;

list.add(new Student("张三", 23));

list.add(new Student("李四", 24));

list.add(new Student("王五", 25));

list.add(new Student("赵六", 26));

Iteratoriter = list.iterator();// 获取迭代器的引证

while (iter.hasNext()) {// 调集中的迭代办法(遍历

System.out.println(iter.next());

}

前提是要在Student中要重写toString办法,不然将会调用Object类中的toString办法

2.Collection存储自界说目标并遍历

Collection coll=new ArrayList();

coll.add(new Student("张三",23));

coll.add(new Student("李四",24));

coll.add(new Student("王五",25));

Iterator iter=coll.iterator();//获取迭代器

while(iter.hasNext()){//判别调集中是否有元素

Student stu=(Student)iter.next();//向下转型System.out.println(stu.getName()+"....."+stu.getAge());

 }

:迭代器的原理及源码解析

 1.迭代器原理
  迭代器原理:迭代器是对调集进行遍历,而每一个调集内部的存储结构都是不同的,所以每一个调集存和取都是不一样,那么就需求在每一个类中界说hasNext()next()办法,这样做是能够的,可是会让整个调集系统过于臃肿,迭代器是将这样的办法向上抽取出接口,然后在每个类的内部,界说自己迭代办法,这样做的优点有二,榜首规则了整个调集系统的遍历办法都是hasNext()next()办法,第二,代码有底层内部完成,运用者不必管怎样完成的,会用即可 
 2.迭代器源码解析
  在eclipsectrl + shift + t找到ArrayList
  ctrl+o查找iterator()办法
  检查回来值类型是new Itr(),说明Itr这个类完成Iterator接口
  查找Itr这个内部类,发现重写了Iterator中的一切笼统办法

:List调集的特有功用概述和测验

 1.List调集的特有功用概述
   void add(int index,E element)
   E remove(int index)
   E get(int index)
   E set(int index,E element)

:List调集存储学生目标并遍历

List list = new ArrayList();

Student stu;

list.add(new Student("张三", 23));

list.add(new Student("李四", 24));

list.add(new Student("王五", 25));

list.add(new Student("赵六", 26));

Iteratoriter = list.iterator();// 获取迭代器的引证

while (iter.hasNext()) {// 调集中的迭代办法(遍历)

System.out.println(iter.next());

}

for (int i = 0; i < list.size(); i++) {

stu = (Student) list.get(i);

System.out.println(stu.getName() + "..." + stu.getAge());

}

:并发修正反常发生的原因及解决方案

  1.需求:我有一个调集,请问,我想判别里边有没有"hello"这个元素,假如有,我就增加一个"world"元素,请写代码完成。

Listlist = new ArrayList();

list.add("a");

list.add("b");

list.add("hello");

list.add("c");

list.add("d");

Iteratoriter=list.iterator();

String str;

while(iter.hasNext()){

str=(String)iter.next();

if("hello".equals(str)){

list.add("world");//这里会抛出ConcurrentModificationException并发修正反常

}

}

System.out.println(list);

 2.ConcurrentModificationException出现
   迭代器遍历,调集修正调集
 3.解决方案
   a:迭代器迭代元素,迭代器修正元素(ListIterator的特有功用add)
   b:调集遍历元素,调集修正元素

Listlist = new ArrayList();

list.add("a");

list.add("b");

list.add("hello");

list.add("c");

list.add("d");

ListIteratoriter = list.listIterator();//假如想在遍历的过程中增加元素,能够用ListIterator

 while (iter.hasNext()) {

String str = (String) iter.next();

if ("hello".equals(str)) {

iter.add("world");

}

}

System.out.println(list);

十一:ListIterator

 1.boolean hasNext()是否有下一个
  2.boolean hasPrevious()是否有前一个
  3.Object next()回来下一个元素
  4.Object previous();回来上一个元素

十二:Vector的特有功用

 1.Vector类特有功用
   public void addElement(E obj)
   public E elementAt(int index)
   public Enumeration elements()
 2.Vector的迭代

Vectorvector = new Vector();// 创立调集目标,List的子类

vector.add("a");

vector.add("b");

vector.add("hello");

vector.add("c");

vector.add("d");

Enumerationenu = vector.elements();// 获取枚举

while (enu.hasMoreElements()) {// 判别调集中是否有元素

System.out.println(enu.nextElement());// 获取调集中的元素

}