0
点赞
收藏
分享

微信扫一扫

蓝桥杯学习笔记方法论1 容器知识

不会弹吉他的二郎腿 2022-03-30 阅读 62

        千里之行,始于足下。

                                                                                      ——春秋老子《道德经》

Java Vector 的 Api。

修饰符和类型方法和说明
booleanadd(E e)将指定的元素附加到此 Vector 的末尾。
voidadd(int index, E element)在此 Vector 的指定位置插入指定元素。
booleanaddAll(Collection<? extends E> c)将指定集合中的所有元素追加到末尾 这个向量,按照它们由指定的返回的顺序 集合的迭代器。
booleanaddAll(int index, Collection<? extends E> c)将指定 Collection 中的所有元素插入到此 指定位置的向量。
voidaddElement(E obj)将指定的组件添加到此向量的末尾, 将其大小增加一。
intcapacity()返回此向量的当前容量。
voidclear()从此 Vector 中删除所有元素。
Objectclone()返回此向量的克隆。
booleancontains(Object o)退货 true 如果此向量包含指定的元素。
booleancontainsAll(Collection<?> c)如果此 Vector 包含所有元素,则返回 true 指定的集合。
voidcopyInto(Object[] anArray)将此向量的分量复制到指定的数组中。
EelementAt(int index)返回指定索引处的组件。
Enumerationelements()返回此向量的组件的枚举。
voidensureCapacity(int minCapacity)如有必要,增加此向量的容量,以确保它至少可以容纳由指定的组件数量最小容量参数。
booleanequals(Object o)比较指定的 Object 与此 Vector 是否相等。
EfirstElement()返回第一个组件(索引处的项目 0) 的这个向量。
Eget(int index)返回此 Vector 中指定位置的元素。
inthashCode()返回此 Vector 的哈希码值。
intindexOf(Object o)返回指定元素第一次出现的索引 在此向量中,如果此向量不包含该元素,则为 -1。
intindexOf(Object o,int index)返回指定元素第一次出现的索引这个向量,从 index, 或返回 -1 如果 未找到该元素。
voidinsertElementAt(E obj, int index)将指定对象作为组件插入此向量中的 指定的 index.
booleanisEmpty()测试此向量是否没有组件。
Iteratoriterator()以适当的顺序返回此列表中元素的迭代器
ElastElement()返回向量的最后一个组件。
intlastIndexOf(Object o)返回指定元素最后一次出现的索引在此向量中,如果此向量不包含该元素,则为 -1。
intlastIndexOf(Object o, int index)返回指定元素最后一次出现的索引这个向量,从 index, 或返回 -1 如果 未找到该元素。
ListIteratorlistIterator()返回此列表中元素的列表迭代器(在适当的顺序)。
ListIteratorlistIterator(int index)返回此列表中元素的列表迭代器(在适当的序列),从列表中的指定位置开始。
Eremove(int index)移除此 Vector 中指定位置的元素。
booleanremove(Object o)移除此 Vector 中第一次出现的指定元素如果 Vector 不包含该元素,则它保持不变。
booleanremoveAll(Collection<?> c)从此 Vector 中删除其包含在指定的集合。
voidremoveAllElements()从此向量中删除所有组件并将其大小设置为零。
booleanremoveElement(Object obj)删除参数的第一个(最低索引)出现从这个向量。
voidremoveElementAt(int index)删除指定索引处的组件。
protected voidremoveRange(int fromIndex, int toIndex)从此列表中删除索引介于两者之间的所有元素 fromIndex,包括在内,和 toIndex, 独家的。
booleanretainAll(Collection<?> c)仅保留此 Vector 中包含在指定的集合。
Eset(int index, E element)将此 Vector 中指定位置的元素替换为指定的元素。
voidsetElementAt(E obj,int index)将组件设置在指定的位置 index 这个的向量是指定的对象。
voidsetSize(int newSize)设置此向量的大小。
intsize()返回此向量中的组件数。
ListsubList(int fromIndex,int toIndex)返回此列表中 fromIndex 之间的部分的视图
Object[]toArray()返回一个包含此 Vector 中所有元素的数组以正确的顺序。
T[]toArray(T[] a)返回一个包含此 Vector 中所有元素的数组正确的顺序; 返回数组的运行时类型指定数组。
StringtoString()返回此 Vector 的字符串表示形式,包含 每个元素的字符串表示。
voidtrimToSize()将此向量的容量修剪为向量的电流 尺寸。

题目01 快递分拣

题目描述:

快递员需要对快递进行分拣,现在小李是一名快递员,他想要你帮他设计一个程序用于快递的分拣,按城市分开。

现在有以下输入:

单号 省份
​
请你将单号按照城市分开,并输出。
​
城市按照输入顺序排序
​
单号按照输入顺序排序

样例如下:

输入
​
10 
​
10124214 北京
12421565  上海
sdafasdg213 天津
fasdfga124 北京
145252  上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉  
23423565f 沈阳
1245dfwfs 成都
​
输出
​
北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg 
1245dfwfs 
武汉 1
23423
沈阳 1
23423565f 

代码:

public class _01快递分拣 {
​
    static Vector<String> city = new Vector<String>(); //存放城市
    static Vector<Vector<String>> dig = new Vector<Vector<String>>(); // 存放订单
​
    public static void main(String[] args) {
​
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        // in.nextLine();
        for (int i=0; i<n; ++i) {
​
            String d = in.next();
            String c = in.next();
            int flag = myFind(c); // 查询城市存在否
​
            if (flag == -1) {
                city.addElement(c);
                dig.addElement(new Vector<String>());
                dig.get(city.size()-1).addElement(d);
            } else {
                dig.get(flag).addElement(d);
            }
        }
​
        for(int i=0; i<city.size(); ++i) {
​
            System.out.println(city.get(i) + " " + dig.get(i).size());
​
            for(int j=0; j < dig.get(i).size(); ++j) {
                System.out.println(dig.get(i).get(j));
            }
        }
    }
​
    static int myFind(String s) {
        for (int i=0; i<city.size(); ++i) {
            if (city.get(i).equals(s)) {
                return i;
            }
        }
        return -1;
    }
}

队列Queue

定义方式:

Queue<String> queue = new LinkedList<String>();

部分成员函数(包括继承的):

  • add(): 增加一个元索,如果队列已满,则抛出一个异常

  • remove():移除并返回队列头部的元素,如果队列为空,则抛出一个异常

  • element():返回队列头部的元素,如果队列为空,则抛出一个异常

  • offer():添加一个元素并返回 true,如果队列已满,则返回 false

  • poll(): 移除并返问队列头部的元素,如果队列为空,则返回 null

  • peek(): 返回队列头部的元素,如果队列为空,则返回 null

  • put(): 添加一个元素, 如果队列满,则阻塞

  • take(): 移除并返回队列头部的元素,如果队列为空,则阻塞

  • size(): 返回队列长度。

题目01 CLZ的银行

第一行 M 次操作(M<1000)
​
第二行 到 第M+1行 输入操作
​
格式:   
IN name V
OUT V
IN name2 N
OUT N
即 第一个字符串为操作 是IN进入排队和OUT 出队
    IN 排队 跟着两个字符串为姓名和权限V或N
    OUT 为出队即完成操作,V和N代表那个窗口完成了操作
​
输出:M次操作后V队列和N队列中姓名,先输出V队列后输出N队列。
​
样例:
输入:
​
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
​
输出:
​
Adel
CLZ
laozhao

代码:

public class _02CLZ的银行 {
​
    static Queue<String> V = new LinkedList<String>();
    static Queue<String> N = new LinkedList<String>();
​
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int M = in.nextInt();
​
        while (M > 0) {
            M--;
            String op, name, type;
            op = in.next();
            if (op.contains("IN")) {
                name = in.next();
                type = in.next();
                if (type.contains("V")) {
                    V.offer(name);
                } else {
                    N.offer(name);
                }
            } else {
                type = in.next();
                if (type.contains("V")) {
                    V.poll();
                } else {
                    N.poll();
                }
            }
        }
​
        while (V.size() != 0) {
            System.out.println(V.poll());;
        }
        while (N.size() != 0) {
            System.out.println(N.poll());
        }
    }
}

Map 映射

定义方法:

Map m1 = new TreeMap(); 

这里我们讲的是排序的 map 还有不排序的 map,java 里面叫 hashmap,C++ 里叫 unordered_map,除了不排序,用法和功能都一样。

二者相差无几,大家如果不需要排序可以直接使用。

成员方法

方法名方法描述
void clear( )从此映射中移除所有映射关系(可选操作)。
boolean containsKey(Object k)如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object v)如果此映射将一个或多个键映射到指定值,则返回 true。
boolean equals(Object obj)比较指定的对象与此映射是否相等。
Object get(Object k)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int hashCode( )返回此映射的哈希码值。
boolean isEmpty( )如果此映射未包含键-值映射关系,则返回 true。
Set keySet( )返回此映射中包含的键的 Set 视图。
Object put(Object k, Object v)将指定的值与此映射中的指定键关联
Object remove(Object k)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size( )返回此映射中的键-值映射关系数。
Collection values( )返回此映射中包含的值的 Collection 视图。

试题03 弗里石的的语言

输入:

第 1 行,输入N,代表共计创造了多少个单词
第 2 行至第 N+1 行,输入 N 个单词
​
格式:  
​
    fjsdfgdfsg
    fdfsgsdfg
    bcvxbxfyres 
 

现在有以下样例输入:

样例 1

输入:
​
6
1fagas 
dsafa32j
lkiuopybncv
hfgdjytr
cncxfg
sdhrest
​
输出:
​
NO

样例 2

输入:
​
5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds
​
输出:
​
sdfggfds

代码:

public class _03弗里石的的语言 {
​
    static Map<String, Boolean> mp = new TreeMap<String, Boolean>();
    public static void main(String[] args) {
​
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        boolean flag = false; // 单词不在mp中
        String ans = "No"; // 不存在重复单词
​
        for (int i=0; i<n; ++i) {
            String word = in.next();
            if (flag) {
                continue;
            }
​
            if (mp.containsKey(word)) {
                flag = mp.containsValue(word);
                ans = word;
            } else {
                mp.put(word,true);
            }
        }
        
        System.out.println(ans);
    }
}
举报

相关推荐

0 条评论