底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢
从线程安全问题来看:线程不安全的,不同步,执行效率高
ArrayList是List集合的子实现类,它元素可以重复,并且存储和取出一致
package org.lemon.List;
//ArrayList是List集合的子实现类,它元素可以重复,并且存储和取出一致
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add("wo");
array.add("wo");
array.add("ai");
array.add("ai");
array.add("ni");
array.add("ni");
Iterator it = array.iterator();
while(it.hasNext()) {
String s = (String)it.next();
}
}
}
ArrayList集合来存储自定义对象并遍历
package org.lemon.List;
import java.util.ArrayList;
import java.util.Iterator;
//ArrayList集合来存储自定义对象并遍历
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
//
Student s1 = new Student("透体圣光",20);
Student s2 = new Student("炙热银弹",21);
Student s3 = new Student("冷酷追击",22);
Student s4 = new Student("圣枪洗礼",23);
al.add(s1);
al.add(s2);
al.add(s3);
al.add(s4);
Iterator it = al.iterator();
while(it.hasNext()) {
Student s =(Student)it.next();
System.out.println(s);
}
}
}
package org.lemon.List;
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
Vector:
底层数据结构是数组的形式,查询快,增删慢
从线程角度看:线程安全的类,同步,执行效率低
特有功能: public void addElement(E obj)------->相当于:add(Object e)
public Enumeration<E> elements()----->相当于:Iterator iterator() ;
Enumeration<E>接口:向量的组件枚举有两个方法
boolean hasMoreElements():------>相当于:hasNext()
Object nextElement():----------->相当于:next();
package org.lemon.List;
import java.util.Enumeration;
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args) {
Vector v = new Vector();
//添加元素 public void addElement(E obj)
v.addElement("wo");
v.addElement("wo");
v.addElement("hai");
v.addElement("ai");
v.addElement("ni");
//public Enumeration<E> elements()----->相当于:Iterator iterator() ;
//boolean hasMoreElements():------>相当于:hasNext()
//Object nextElement():----------->相当于:next();
Enumeration en = v.elements() ;
while(en.hasMoreElements()) {
String s =(String) en.nextElement();
System.out.println(s);
}
}
}
LinkedList:
底层数据结构是链接列表,特点:查询慢,增删快
从线程角度看:线程不安全的一个类,不同步,执行效率高
特有功能:
添加功能:
public void addFirst(E e)将指定元素插入此列表的开头。
public void addLast(E e)将指定元素添加到此列表的结尾。
获取功能:
public Object getFirst()返回此列表的第一个元素
public Object getLast()返回此列表的最后一个元素。
删除功能:
public Object removeFirst()移除并返回此列表的第一个元素。
public Object removeLast()移除并返回此列表的最后一个元素
package org.lemon.List;
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList link = new LinkedList();
link.add("wo");
link.add("yong");
link.add("yuan");
link.add("ai");
link.add("ni");
Iterator it = link.iterator();
while(it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
}
}
ArrayList去除集合中字符串的重复元素
package org.lemon.List2;
import java.util.ArrayList;
import java.util.Iterator;
//ArrayList去除集合中字符串的重复元素 方法1:创建新集合
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add("wo");
array.add("yi");
array.add("yi");
array.add("ran");
array.add("ran");
array.add("ai");
array.add("ni");
array.add("ni");
ArrayList array2 = new ArrayList();
Iterator it = array.iterator();
while(it.hasNext()) {
String s = (String) it.next();
if(!array2.contains(s)) {
array2.add(s);
}
}
Iterator it2 =array2.iterator();
while(it2.hasNext()) {
String s = (String) it2.next();
System.out.println(s);
}
}
}
package org.lemon.List2;
//ArrayList去除集合中字符串的重复元素 方法2:使用选择排序方法
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add("wo");
array.add("yi");
array.add("yi");
array.add("ran");
array.add("ran");
array.add("ai");
array.add("ni");
array.add("ni");
for(int i =0; i<array.size()-1;i++) {
for(int j=i+1;j<array.size();j++) {
if(array.get(i).equals(array.get(j))) {
array.remove(j);
j--;
}
}
}
Iterator it =array.iterator();
while(it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
}
}
ArrayList去除集合中自定义对象的重复值(对象的成员变量值都相同)
contains()底层依赖于一个equals()方法,equals()方法是Object类的中的方法,该法默认比较的是对象的地址值是否相同,必须要重写Object中的eqauls()方法,才能比较内容是否相同 在自定义对象的类中重写Object中的equasl()方法,才能比较成员变量的值是否相同
package org.lemon.List2;
import java.util.ArrayList;
import java.util.Iterator;
//ArrayList去除集合中自定义对象(Student)的重复值(对象的成员变量值都相同)
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList array = new ArrayList();
Student s1 = new Student("wo", 24) ;
Student s2 = new Student("wo", 24) ;
Student s3 = new Student("yi", 1) ;
Student s4 = new Student("ran", 2) ;
Student s5 = new Student("ran", 2) ;
Student s6 = new Student("ai", 3) ;
Student s7 = new Student("ni", 22) ;
Student s8 = new Student("ni", 22) ;
array.add(s1) ;
array.add(s2) ;
array.add(s3) ;
array.add(s4) ;
array.add(s5) ;
array.add(s6) ;
array.add(s7);
array.add(s8);
ArrayList array2 = new ArrayList();
Iterator it =array.iterator();
while(it.hasNext()) {
Student s = (Student) it.next();
if(!array2.contains(s)) {
array2.add(s);
}
}
Iterator it2 =array2.iterator();
while(it2.hasNext()) {
Student s =(Student) it2.next();
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
package org.lemon.List2;
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//自动生成
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
泛型:把数据类型的明确工作提供提前到了创建对象或者是调用方法的时期明确的一种特殊类型.参数化类型,可以像参数一样进行传递
格式:
<引用类型>:泛型只能放引用类型
泛型好处:
1)将运行时期异常提前到了编译时期
2)解决了黄色警告线问题
3)获取数据的时候,不用强制类型转换了
泛型的应用:
一般情况:泛型可以应用在接口,类,或者方法上;主要用在集合中比较多!
package org.lemon.Generic;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("斩钢闪");
array.add("风之屏障");
array.add("踏前斩");
array.add("狂风绝息斩");
Iterator<String> it = array.iterator();
while(it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}
使用ArrayList集合存储自定义对象并遍历
package org.lemon.Generic;
import java.util.ArrayList;
import java.util.Iterator;
//使用ArrayList集合存储自定义对象并遍历
public class GenericDemo2 {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<Student> ();
Student s1 = new Student("符文之刃",18);
Student s2 = new Student("折翼之舞",20);
Student s3 = new Student("震魂怒吼",19);
Student s4 = new Student("勇往直前",22);
Student s5 = new Student("放逐之锋",21);
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
array.add(s5);
Iterator<Student> it = array.iterator();
while(it.hasNext()) {
Student s = it.next();
System.out.println(s.getName()+"--"+s.getAge());
}
}
}
package org.lemon.Generic;
public class Student {
private String name ;
private int age ;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在方法上
package org.lemon.Generic.在方法上;
public class ObjectTool {
public <T> void show(T t) {
System.out.println(t);
}
}
package org.lemon.Generic.在方法上;
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool ot = new ObjectTool();
ot.show("黄海波");
ot.show(38);
ot.show(true);
}
}
在类上
package org.lemon.Generic在类上;
public class ObjectTool<T> {
private T obj;
public T getObj(){
return obj;//获取
}
public void setObj(T obj) {
this.obj=obj;//设置
}
}
package org.lemon.Generic在类上;
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool<String> ot = new ObjectTool<String>();
ot.setObj("高圆圆");
String s = ot.getObj(); //类型必须一致
System.out.println(s);
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();
ot2.setObj(88);
Integer i =ot2.getObj();//类型必须一致
System.out.println(i);
}
}
在接口上
package org.lemon.Generic.在接口上;
public interface Inter <T>{
public abstract void show(T t);
}
package org.lemon.Generic.在接口上;
public class InterImpl<T> implements Inter<T> {
面向接口编程
@Override
public void show(T t) {
System.out.println(t);
}
}
package org.lemon.Generic.在接口上;
public class InterDemo {
public static void main(String[] args) {
Inter<String> i = new InterImpl<String>();
i.show("我就是爱高圆圆,无论多少岁");
Inter<Integer> i2 = new InterImpl<Integer>();
i2.show(20);
}
}
泛型的高级:通配符
<?> :可以是任意类型,包括Object类型以及任意的Java类
<? extends E>:向下限定,E类型以及E类型的子类
<? super E>:向上限定,E类型以及E类型的父类
增强for循环
格式:
for(集合或者数组中的数据类型 变量名:集合或者数组的对象名){
输出变量名;
}
增强for循环的弊端:
遍历数组或者集合的时候,数组对象或者集合对象不能为null
如果对象为空,一般加上非空判断
增强for循环的出现就是为了替代迭代器遍历集合的,以后开发中就是用增强for遍历元素
package org.lemon.增强For循环;
public class ForDemo {
public static void main(String[] args) {
int [] arr = {23,12,44,35,64,54};
//
for(int i = 0;i<arr.length;i++) {
System.out.println(arr[i]);
}
//
for(int i : arr) {
System.out.println(arr);
}
String [] strArray = {"wo", "ai" ,"ni"};
for(String s : strArray) {
System.out.println(s);
}
}
}
使用ArrayList集合存储自定义对象并遍历
package org.lemon.增强For循环;
import java.util.ArrayList;
import java.util.Iterator;
public class ForDemo2 {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList<Student>();
Student s1 = new Student("告白气球",24);
Student s2 = new Student("晴天",20);
Student s3 = new Student("七里香",21);
Student s4 = new Student("床边故事",18);
Student s5 = new Student("不该",30);
array.add(s1);
array.add(s2);
array.add(s3);
array.add(s4);
array.add(s5);
//最普通的for循环
for(int i = 0;i<array.size();i++) {
Student s =array.get(i);
System.out.println(s.getName()+"---"+s.getAge());
}
//迭代器
Iterator it = array.iterator();
while(it.hasNext()) {
Student s = (Student) it.next();
System.out.println(s.getName()+"---"+s.getAge());
}
//增强for
for(Student s : array) {
System.out.println(s.getName()+"--"+s.getAge());
}
}
}
package org.lemon.增强For循环;
public class Student {
private String name ;
private int age ;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}