public static void main(String[] args) {
        Stu stu1 = new Stu("张三",18);
        Stu stu2 = new Stu("李四",18);
        Stu stu3 = new Stu("王五",18);
        List<Stu> list = new ArrayList<Stu>();
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        String loopJoint = loopJointDESC(list, list.size());
        System.out.println(loopJoint);
     * 实现学生集合的姓名拼接:name1|name2|nameN
     * @param list
     * @param size 控制递归次数(size=list.size())
     * @return
    public static String loopJointDESC(List<Stu> list,int size ) {
        if(list.size()<=0) return null;
        if(size==1) return list.get(0).getName();
        String joinStr = "|";
        size--;//下标值和递归次数减少1
        String name = list.get(size).getName();
        String loopJoint = loopJointDESC(list, size);
        return name+joinStr+loopJoint;
public class Stu {
    private String name;
    private Integer age;
    public String getName() {
        return name;
    public void setName(String name) {
        this.name = name;
    public Integer getAge() {
        return age;
    public void setAge(Integer age) {
        this.age = age;
    public Stu(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    public Stu() {
        super();

 发现反过来拼接了,于是改为

    public static String loopJointASC(List<Stu> list,int size ) {
        if(list.size()<=0) return null;
        if(size==1) return list.get(list.size()-1).getName();
        String joinStr = "|";
        String name = list.get(list.size()-size).getName();
        size--;//下标值和递归次数减少1
        String loopJoint = loopJointASC(list, size);
        return name+joinStr+loopJoint;

 分隔符 “|” 可自己定义也可以删除。

 最后留下两个问题:

    当list非常大的时候,使用for 循环和递归哪种实现方式的速度更快呢?

    双层for 循环改为,for循环+递归性能会不会更好呢?

更多优质文章、学习资源、IDEA激活码等请关注👇