Array和set的练习及代码练习详情、TreeSet和HashSet使用代码

 List下有:ArrayList、LinkedList、Vector三种,下面描述的是ArrayList、LinkedList和Vector

List的ArrayList的实现:

了解ArrayList的各个方法的使用原理:

package cn.tedu.Arrays;

import java.util.Arrays;

/**
 * 练习:
实现ArrayList
	MyArray      (String)
	int size;//表示集合的元素个数
	String[] strArray;
 * @author cll
 */
class MyArray {
	private int size;
	private String[] strArray;
	//	1.定义无参的构造方法  默认给数组10个
	//	MyArray()
	public MyArray(){
		strArray = new String[10];
	}
	//2.定义一个带参的构造方法
	//MyArray(int length);
	public MyArray(int length){
		strArray=new String[length];
	}
	 /*3.add(String str);
		判断元素的个数和数组的长度之间的关系  size>=strArray 扩容
		添加元素
		size++; */
	public void add(String str){
		if(size>=strArray.length){
			grow();
		}
		strArray[size]=str;
		size++;
		
	}
	/*4.定义grow方法
	规则:数组长度的一半(如果数组长度为1 ,扩容应该是+1)*/
	public void grow(){
		if(strArray.length<=1){
			strArray = Arrays.copyOf(strArray, strArray.length+1);
			
		}else{
			strArray = Arrays.copyOf(strArray, strArray.length+strArray.length/2);
		}
	}
	/* 5.add(int index,String str)
		判断元素的个数和数组的长度之间的关系  size>=strArray 扩容
		当前的数组元素后移
		插入元素
		size++;*/
	public void add(int index,String str){
		if(size>strArray.length){
			grow();
		}
				//第一个参数:原数组
				//第二个参数:原数组元素的起始位置
				//第三个参数:目标数组
				//第四个参数:目标数组元素的起始位置
				//第五个参数:长度(拷贝元素的长度)
		System.arraycopy(strArray, index, strArray, index+1, size-index);
		strArray[index]=str;
		size++;
	}
	public void remove(int index){
		//6.remove(int index)
		//当前的数组元素前移
		//size--;
		System.arraycopy(strArray, index+1, strArray, index, size-index);
		size--;
	}
	//7.set(int index,String str):修改
	public void set(int index,String str){
		strArray[index] =str;
		
				
	}
	//8.get(int index):获取元素
	public String get(int index){
		return strArray[index];
	}
	//9.size():返回集合中的元素个数
	public int size(){
		return size;
	}
}
public class Demo{
		
	public static void main(String[] args) {
		MyArray arr =new MyArray();
		arr.add("hello");
		arr.add("abc");
		arr.add("admin");
		for(int i= 0;i

LinkedList的使用增添方法的练习:

package cn.tedu.Test;

import java.util.LinkedList;

public class DemoLinkedList {

	private int size = 0; // 节点个数
	private Node first; // 第一个节点
	private Node last; // 最后一个节点

	//无参构造方法
        public DemoLinkedList(){
        	//this();
        	LinkedList list=new LinkedList();
        }
        //添加元素
	public void add(String str) {
		Node node =new Node(null,str,null);
		if(size==0){
			this.first=node;
			this.last=node;
		}else{
			this.last.next=node;//新插入的node等于当前链表的最后一个的下一个
			node.prev=this.last;//新插入的node等于当前列表的最后一个
			this.last=node;//当前列表的最后一个变成node
		}
		size++;
	}
        //插入
	public void add(int index, String str) {
		//最后插入的调用add方法
		if(index==size){
			this.add(str);
			return;
		}
		Node node =new Node(null,str,null);
		if(index==0){
			//在链表的最前面
			node.next=this.first.prev;//node的下一个变成当前列表的第一个的前一个
			this.first.prev=node;//当前列表的第一个的前一个变成node
			
			this.first=node;
		}else{
			Node node1 =this.getNode(index);
			node1.prev.next=node;
			node.prev=node1.prev;
			node1.prev=node;
			node.next=node1;
			
		}
		

	}
        // 获取指定位置的节点
	private Node getNode(int index) {
		Node node = this.first;
		for(int i=0;i

Set集合的HashSet和TreeSet

HashSet如下所示:

package cn.tedu.Linkedlist;

import java.io.PrintStream;
import java.util.HashSet;
import java.util.Set;

public class Demo2 {
	public static void test(){
		Set set = 
				new HashSet<>();
		set.add("张三");
		set.add("张三");
		set.add("李四");
		set.add("王五");
		set.remove("王五");
		set.forEach(System.out::println);
	}
	public static void test2(){
		Set set= new HashSet<>();
		set.add(new Emp("张三"));
		set.add(new Emp("张三"));
		set.add(new Emp("李四"));
		set.add(new Emp("王五"));
		//在只有name方法之后,重写了hashCode之后才将张三看作是一个对象
		set.forEach(System.out::println);
		
	}
	public static void main(String[] args) {
		test2();
	}
}

TreeSet如下所示:

package cn.tedu.Linkedlist;

import java.util.TreeSet;

public class Demo3 {
	public static void test(){
		TreeSet set =new TreeSet<>();
		set.add("abc");
		set.add("bde");
		set.add("ayui");
		set.forEach(System.out::println);
	}
	public static void test2(){
		TreeSet set =new TreeSet<>(
				(emp1,emp2)->emp1.getName().length()-emp2.getName().length());
		set.add(new Emp("admin"));
		set.add(new Emp("abn"));
		set.add(new Emp("adjllkl"));
		set.forEach(System.out::println);
	}
	public static void main(String[] args) {
		test2();
	}
}

HashSet是基于HashMap实现,是map中的key

HashSet和HashMap的不同:

HashSet是对象为元素的,是实现的set接口,使用add添加元素的,对象的存储有相同的,需要重写HashCode和equals方法区分相同的元素。

HashMap是以一组对象作为元素的,是实现的Map接口,使用put添加元素。

map:不允许有重复的key

分为:TreeMap和HashMap两种,TreeMap是有排序的,HashMap是不排序的。

 

你可能感兴趣的:(代码练习,java)