1.list集合中方法的介绍
//集合:作为一种容器,比数组灵活
//数组和集合的区别
//数组的长度是固定的,集合的长度是可变的
//数组既能存储基本数据类型,又能存储引用数据类型,集合只能存储引用数据类型
//数组存储同一种数据类型,集合可以存储多种数据类型
//Collection list set
//List------>Arraylist vector LinkedList
//List 元素有序(存取元素顺序一致),允许重复元素
List list = new Arraylist();
list.add("li");
list.add("wang");
list.add("zhang");
list.remove(0); //特有方法,根据索引移除元素
object o = list.get(1);
object o1 = list.set(1,"liu");
System.out.println(list);
List list = new Arraylist();
list.add(1);
list.add(2);
list.add(300);
list.remove(1);
list.remove(Integer.valueof(300)); //区分不出来,索引和元素,手动包装一下,就可区分出来
List list = new Arraylist();
list.add("li");
list.add("wang");
list.add("zhang");
for(int i = 0;i<list.size();i++){
object q = list.get(i);
System.out.println(list);
}
List list = new Arraylist();
list.add("li");
list.add("wang");
list.add("zhang");
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()){
Object obj = listIterator.next();
String str= (String) obj;
if(str.equals("world")){
list.remove("Java");
list.add("JavaEE");//当我们使用迭代器,遍历集合元素时,我们的迭代器事先已经知晓,集合中的元素个数,你突然在迭代途中,想要增加或删除,一个元素,那么就会打乱,原来集合中的元素的顺序,那么迭代器也就无所适从了。就会抛出一个并发修改异常。
//解决方式1:我们使用迭代器进行遍历,迭代途中如果要添加元素和删除元素,可以使用迭代器的添加删除元素的方法
//listIterator.add("JavaEE");
//listIterator.remove();
2.数据结构和算法
//数据结构和算法
//数据结构:一种数据存储的方式。
//常见的数据结构:栈,队列,数组,链表,树,哈希表
//数据结构的特点
//栈:先进后出,后进的先出。弹夹
//队列:先进的先出,后进的后出 出地铁站
//数组:查询快(有索引) 增删慢
//链表:
3.Arraylist,vector与LinkedList
public class MyTest2 {
public static void main(String[] args) {
//List:数组元素有序,允许元素重复
//List
// ArrayList 底层数据结构是 数组,查询快,增删慢。线程不安全,效率高
//Vector: 底层数据结构是 数组,查询快,增删慢,线程安全,效率低
// LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全效率高
//我选哪种容器,看需要选择
}
}
Arraylist
ArrayList list = new ArrayList();
list.add(100);
list.add(200);
list.add(300);
list.add(30);
list.add(10);
list.add(109);
list.add(30);
int i = list.indexOf(30);
System.out.println(i);
int i1 = list.lastIndexOf(30);
System.out.println(i1);
List list1 = list.subList(0,2);//根据起始索引与终值索引截取到新的集合中
0bject clone = list.clone();//克隆一个集合
//排序集合中的元素
//Comparator 比较器
list.sort(new Comparator() {
@Override
public int compare(Object a, Object b) {
Integer aa= (Integer) a;
Integer bb= (Integer) b;
return bb-aa;
}
});
System.out.println(list);
}
}
Vector
//void addElement (E obj)
//将指定的组件添加到此向量的末尾,将其大小增加 1。
//E elementAt ( int index)
//返回指定索引处的组件。
//Enumeration<E> elements ()
//返回此向量的组件的枚举。
//
//E firstElement ()
//返回此向量的第一个组件(位于索引 0)处的项)。
//E lastElement ()
//返回此向量的最后一个组件。
//void removeAllElements ()
//从此向量中移除全部组件,并将其大小设置为零。
//boolean removeElement (Object obj)
//从此向量中移除变量的第一个(索引最小的)匹配项。
//void removeElementAt ( int index)
//删除指定索引处的组件。
LinkedList
public class MyList {
LinkedList linkedList=null;
public MyList() {
linkedList = new LinkedList();
}
//添加元素
public void addEle(String ele) {
// ccc bbb aaa
linkedList.addFirst(ele);
}
public Object getEle() {
Object pop = linkedList.pop();
//你把取的元素再加回去
linkedList.addLast(pop);
return pop;
}
}
4.泛型
public class MyTest {
public static void main(String[] args) {
//泛型机制:JDK1.5之后引入的一个概念
//把类型明确工作,推迟到创建对象,或调用方法时,才去明确的一种机制。
//泛型的语法:<数据类型,数据类型>
//泛型可以加在 接口上,类型,方法上
//泛型的好处:1.避免了向下转型,2.将问题提前到了编译期
//泛型的特点:泛型只在编译期有效,在运行期就擦除了。
//泛型可以限定,我这个集合中存储什么样的引用数据类型
5.新式for循环
//新式for循环遍历数组
//1,明确容器中的元素是什么数据类型
//2.容器的名字
// for(容器中的元素的数据类型 当前遍历的元素名 : 容器名)
6 补充
public class MyTest {
public static void main(String args) {
int[] arr = {20, 40, 50, 60};
//System.out.println(arr);
//System.out.println(Arrays.toString(arr));
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1004);
list.add(1000);
list.add(1002);
list.add(10026);
list.add(10077);
list.add(10089);
list.add(10000);
list.add(100444);
//把集合转成数组
//创建一个数组,遍历集合取出元素放到数组里面
//Integer[] arrins=new Integer[list.size()];
// Object[] objects = list.toArray();
int[] arr2 = {20, 40, 50, 60};
//把数组转换成集合
List<int[]> ints = Arrays.asList(arr2);
int[] ints1 = ints.get(0);