1、java笔记数组和集合数组和集合:数组(Array): 相同类型数据的集合就叫做数组。数组是一个对象如何定义数组:1) type 变量名=new type 数组长度 ; eg: int a=new int4; 或int a =new int4; /表示定义了一个int类型数组,名字叫a,数组长度为4, 赋初值:a0=1; a1=2; a2=3; a3=4;2)第2种:定义并赋初值int a=1,2,3,4; 或int a=new int 1,2,3,4;(这个new int后的“ ”中不能加上数,比如4)Java中的每个数组都有一个名为 length的属性,表示数组的长度。length属性是p
2、ublic、final、int的。数组长度一旦确定,就不能改变大小。 输出结果为 100且不能有 因为已定义了a数组长度为100 原生类型的:int a=new int10,其中a是一个引用,它指向了生成的数组对象的首地址,数组中每个元素都是int类型,其中仅存放数据值本身。没有为其赋值时,int型默认为0,boolean型默认为false等 a0=a1=a2=a3=0引用类型:public class Test public static void main(String args) Person p=new Person3; p0=new Person(); p1=new Person()
3、; p2=new Person(); p0.age=20; p1.age=21; p2.age=22; for(int i=0;ip.length;i+) System.out.println(pi.age);class Person int age; 运行结果: 图示:二维数组: 定义方式: type a=new type 数组行数 数组列数 ;1)int a=new int23; /定义了一个2行3列的二维数组。2)表示的是: 3)二维数组比如 中a.length 表示的是数组行数。应用:1)冒泡排序: public class Test public static void main(S
4、tring args) Array A=new Array(); int a=new int4,7,2,9; A.P(a); class Array public void P(int a) for(int i=0;ia.length-1;i+) for(int j=0;jaj+1) int t=aj+1; aj+1=aj; aj=t; for(int k=0;ka.length;k+) System.out.println(ak); 运行结果: 2)二分查找(Binary Search): 首先要求查找的数组是有序的。查找等值数的位置。public class Test public sta
5、tic int array(int a,int value) int low=0; int high=a.length-1; int middle; while(lowvalue) low=middle-1; if(amiddlevalue) high=middle+1; return -1; public static void main(String args) int a=2,4,5,6,7,9,14,17,21; int value=7; System.out.println(array(a,value); 运行结果: 4集合(类集-collection): 在java.util包中,
6、1)集合中存放的依然是对象的引用而不是对象本身。2)集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。3)集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。4)看下面图1和图2: 的实现类 a)ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。b)使用ArrayList.add()方法增加元素,如果增加的元素个数超过10个,那么ArrayList底层会新生成一个数
7、组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。c)对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。1)ArrayList中某些方法的应用:import java.util.ArrayList;public class Test public static void main(String args) ArrayList array=new ArrayList(); array.add(cwj);/*集合下只能放置对象,此处不能放原生数据类型(如写array
8、.add(2); 是错误的)这里要把它包装成Integer类型的对象(可以去参看包装类型:有8类)*/ array.add(new Integer(2); String a=(String)array.get(0); Integer b=(Integer)array.get(1); System.out.println(a); System.out.println(b.intValue(); 运行结果: 2)ArrayList中的某些方法:import java.util.ArrayList;public class Test public static void main(String ar
9、gs) ArrayList array=new ArrayList(); array.add(new Integer(2); array.add(new Integer(4); array.add(new Integer(7); int sum=0; for(int i=0;iarray.size();i+) int value=(Integer)array.get(i).intValue(); sum +=value; System.out.println(sum); 运行结果: 133)ArrayList中的某些方法:import java.util.ArrayList;public cl
10、ass Test public static void main(String args) ArrayList array=new ArrayList(); array.add(new Integer(1); array.add(new Integer(2); array.add(new Integer(3); array.add(new Integer(4); /* * 不能将Object转换为Integer,即下面那语句不能写成:Integer in=(Integer)array.toArray(); */ Object in=array.toArray(); for(int i=0;ii
11、n.length;i+) System.out.println(Integer)ini).intValue(); 运行结果: 的实现类 链表:public class Test public static void main(String args) Node node1=new Node(meng); Node node2=new Node(huan); Node node3=new Node(xi); Node node4=new Node(you); node1.next=node2; node2.next=node3; node3.next=node4; node4.next=null
12、; / 此句可有可无 System.out.println(node1.next.date); class Node String date; Node next; public Node(String date) this.date=date; 运行结果: huan关于ArrayList与LinkedList的比较分析:1)ArrayList底层采用数组实现,LinkedList底层采用双向链表实现。2)当执行插入或删除操作时,采用LinkedList比较好。3)当执行搜索操作时,采用ArrayList比较好。4)当向ArrayList添加一个对象时,实际上是将该对象放置到了ArrayLis
13、t底层所维护的数组当中;当向LinkedList中添加一个对象时,实际上LinkedList内部会生成一个Entry对象,该Entry对象的结构为:Entry Entry previous; Object element; Entry next; 其中的Object类型的元素element就是我们向LinkedList中所添加的元素,然后Entry又构造好了向前与向后的引用previous、next,最后将生成的这个Entry对象加入到了链表当中。换句话说,LinkedList中所维护的是一个个Entry对象。应用1:用LinkedList实现队列:import java.util.Linke
14、dList;public class Test private LinkedList link=new LinkedList(); public void put(Object o) link.addLast(o); public Object get() return link.removeFirst(); public boolean isEmpty() return link.isEmpty(); public static void main(String args) Test t=new Test(); t.put(one); t.put(two); t.put(three); Sy
15、stem.out.println(t.get(); System.out.println(t.get(); System.out.println(t.get(); System.out.println(t.isEmpty(); 运行结果: 的实现类 当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。使用原本Object中的hashCode及
16、equals方法(这里有疑问):import java.util.HashSet;public class Test public static void main(String args) HashSet set=new HashSet(); Student s1=new Student(zhangsan); Student s2=new Student(zhangsan); set.add(s1); set.add(s2); System.out.println(set); class Student String name; public Student(String name) thi
17、s.name=name; 运行结果: 修改过hashCode及equals方法后:import java.util.HashSet;public class Test public static void main(String args) HashSet set=new HashSet(); Student s1=new Student(zhangsan); Student s2=new Student(zhangsan); set.add(s1); set.add(s2); System.out.println(set); class Student String name; public
18、 Student(String name) this.name=name; public int hashCode() / 重写hashCode方法 return this.name.hashCode(); public boolean equals(Object obj) /重写equals方法 if(this=obj) return true; if(null!=obj&obj instanceof Student) Student s=(Student)obj; if(name.equals(s.name) return true; return false; 运行结果: HashSet
19、下的interator()方法:,返回一个Iterator(接口)类型值。迭代和遍历意思一样,用迭代的方式获得集合,set中的每个元素。使用迭代函数:在通过迭代函数访问类集之前,必须得到一个迭代函数。每一个Collection类都提供一个iterator()函数,该函数返回一个对类集头的迭代函数。通过使用这个迭代函数对象,可以访问类集中的每一个元素,一次一个元素。通常,使用迭代函数循环通过类集的内容,步骤如下:1)通过调用类集的iterator()方法获得对类集头的迭代函数。2)建立一个调用hasNext()方法的循环,只要hasNext()返回true,就进行循环迭代。3)在循环内部,通过调
20、用next()方法来得到每一个元素。import java.util.HashSet;import java.util.Iterator;public class Test public static void main(String args) HashSet set=new HashSet(); set.add(c); set.add(w); set.add(j); Iterator iter=set.iterator(); while(iter.hasNext() String value=(String)iter.next(); System.out.println(value); /
21、 或用下面这段代码代替/ for(Iterator iter=set.iterator();iter.hasNext();)/ / String value=(String)iter.next();/ System.out.println(value);/ 运行结果: HashSet源代码深度剖析:HashSet底层是使用HashMap实现的,当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象(该对象我们用不上); 的实现类 1)import java.util.Iterator;import java.uti
22、l.TreeSet;public class Test public static void main(String args) TreeSet set=new TreeSet(); set.add(b); set.add(c); set.add(a); set.add(d); for(Iterator iter=set.iterator();iter.hasNext();) String value=(String)iter.next(); System.out.println(value); 运行结果: 2)import java.util.Comparator;import java.u
23、til.Iterator;import java.util.TreeSet;public class Test public static void main(String args) /*TreeSet(Comparatorcomparator)构造一个新的空TreeSet,它根据指定比较器进行排序,其中的Comparator是接口类型*/ TreeSet set=new TreeSet(new MyComparator(); set.add(b); set.add(c); set.add(a); set.add(d); for(Iterator iter=set.iterator();it
24、er.hasNext();) String value=(String)iter.next(); System.out.println(value); class MyComparator implements Comparator public int compare(Object arg0, Object arg1) String str0=(String)arg0; String str1=(String)arg1; return pareTo(str0); / String类型下的comparaTo()方法 运行结果: 3)import java.util.Comparator;imp
25、ort java.util.Iterator;import java.util.TreeSet;public class Test public static void main(String args) TreeSet set=new TreeSet(new MyComparator(); Person p1=new Person(10); Person p2=new Person(40); Person p3=new Person(30); set.add(p1); set.add(p3); set.add(p2); for(Iterator iter=set.iterator();ite
26、r.hasNext();) Person value=(Person)iter.next(); System.out.println(value.score); class Person int score; public Person(int score) this.score=score; public String toString() / 不写toString()方法也可以 return String.valueOf(this.score); class MyComparator implements Comparator public int compare(Object arg0,
27、 Object arg1) Person p1=(Person)arg0; Person p2=(Person)arg1; return p1.score-p2.score; 运行结果: 的实现类 Map(映射)Map的keySet()方法会返回key的集合,因为Map的键是不能重复的,因此keySet()方法的返回类型是Set ;而Map的值是可以重复的,因此values()方法的返回类型是Collection,可以容纳重复的元素。import java.util.HashMap;public class Test public static void main(String args) HashMap map=new HashMap();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1